Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:20.1.2014 17:46

PHP má přímo konstrukce pro tvorbu šablon

Jestli máš na mysli střídání kontextu PHP a HTML, tak to je fakt opruz, kvůli kterému vznikají zbytečné frameworky.

Heredoc ... umožňuje vkládat pouze proměnné

Víš sám, že to není pravda. Do Heredoc můžeš vkládat i objekty a jejich vlastnosti.

Odpovědět
20.1.2014 17:46
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:20.1.2014 17:54

Nebudu tu o tom s tebou diskutovat, v praxi se tohle nepoužívá a je vidět, co se stane, když to tu začneš rozebírat. Prospělo by ti, kdyby ses místo bádání v manuálech nechal zaměstnat a dělal na nějakém reálném projektu. Já chci z kluků programátory, ne teoretiky, tak to sem netahej. Snad jsem se vyjádřil jasně.

Nahoru Odpovědět
20.1.2014 17:54
New kid back on the block with a R.I.P
Avatar
Odpovídá na Kit
Michal Žůrek - misaz:20.1.2014 17:57

abych byl upřímný, jak tam vkládáš objekty? toString mi to nezavolalo, vždy jsem to musel dát do vedlejší proměnné.

 
Nahoru Odpovědět
20.1.2014 17:57
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:20.1.2014 17:58

Nevím, proč si o tom controlleru psal v kapitole o Heredoc, ale HTML do controlleru ani do modelu skutečně nepatří. Podobně do controlleru ani vieweru nepatří SQL dotazy. Vše má v MVC své místo.

Nahoru Odpovědět
20.1.2014 17:58
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Michal Žůrek - misaz
Kit:20.1.2014 18:00

Metoda se musí jmenovat __toString().

Nahoru Odpovědět
20.1.2014 18:00
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Milan Gallas
Tvůrce
Avatar
Odpovídá na David Hartinger
Milan Gallas:20.1.2014 18:03

Aspoň že jsem se spálil, příště si dám na tyhle věci pozor. Docela mě to štve, že jsem se rozhodl pro Heredoc(přišlo mi to cool) :D

 
Nahoru Odpovědět
20.1.2014 18:03
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:20.1.2014 18:04

Nemohu se jen tak koukat, jak tady ostatní nutíš dělat procedurální šablony místo objektových. Nemohu ani za to, že kodéři ve firmách programují procedurálně v objektových jazycích.

Nahoru Odpovědět
20.1.2014 18:04
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Milan Gallas
Michal Žůrek - misaz:20.1.2014 18:08

Tak to asi všem.

 
Nahoru Odpovědět
20.1.2014 18:08
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Milan Gallas
Kit:20.1.2014 18:11

Nemohu za to, že Heredoc se David Hartingervi nelíbí. Abys příště prošel, budeš muset soutěžit bez Heredoc.

Nahoru Odpovědět
20.1.2014 18:11
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Kit
Petr Nymsa:20.1.2014 18:20

Mě přijde mnohem lepší mít šablonu

<h1><?= $nadpis ?></h1>
<article><?= $obsahClanku ?></article>
<p>Autor: <?= $autor ?></p>

Než mít HEREDOC, kouknu do šablony a vidím kam co se vypíše. IMHO frontend-developer to bude mít také jednodušší. Řekne se mu že do této šablony mu přijdou tyto data. Je pak na něm jak je umístí

Nahoru Odpovědět
20.1.2014 18:20
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Michal Martinek
Tvůrce
Avatar
Odpovídá na David Hartinger
Michal Martinek:20.1.2014 19:54

Za metody se omlouvám, já to skoro celé udělal naráz, takže tam je hodně chyb celkově. Mohl bych to ještě upravit, opravit, vylepšit a potom zveřejnit dohromady soutěžní i konečný výsledek dohromady zazipovaný?

HEREDOC tam na pár místech mám k výpisu tabulek, u kterých není jasná délka. Čím by se to mělo nahradit?

 
Nahoru Odpovědět
20.1.2014 19:54
Avatar
Libor Šimo (libcosenior):20.1.2014 20:24

Až teraz som si našiel na nete čo to vlastne heredoc je a ak som to správne pochopil, ide len o výpis textu (dúfam, že sa nemýlim). Ak je to tak, tiež si myslým, že jeho použitie je veľmi obmädzené.
Uvediem príklad:
Mám v databáze v tabuľke riadok, v ktorom je jedna položka obrázok.png, ako by v takom prípade heredoc fungoval?
Ak nemám pravdu, vopred sa ospravedlňujem.

Nahoru Odpovědět
20.1.2014 20:24
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Libor Šimo (libcosenior)
Petr Nymsa:20.1.2014 20:31

Fungoval by, ale mě to formátování přijde obtížné a šablona se hůř udržuje

Nahoru Odpovědět
20.1.2014 20:31
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Milan Gallas
Tvůrce
Avatar
Odpovídá na Libor Šimo (libcosenior)
Milan Gallas:20.1.2014 20:39

Mám v databázové tabulce řádek, ve kterém je položka obrazok.png. To asi ne, do databázové tabulky se obrázky neukládají. Ukládají se tam pouze odkazy.
a jinak heredoc by fungoval takhle:

echo <<<EOT
   <table>
      <tr>
          <th>id_obrazku</th><th>obrázek</th>
      </tr>
      foreach($odbrazky as $obrazek){
        <tr>
          <td>$obrazek['id']</td>
          <td><img <img src=$brazek['url'] title=$obrazek['name']></td>
        </tr>
      }
   </table>
EOT;

Pokud jsem tě teda správně pochopil.

Editováno 20.1.2014 20:40
 
Nahoru Odpovědět
20.1.2014 20:39
Avatar
Odpovídá na Milan Gallas
Martin Konečný (pavelco1998):20.1.2014 20:43

Do Heredoc nelze psát jazykové konstrukce. Musel bys ten foreach hodit mimo a text postupně ukládat do nějaké proměnné, kterou bys pak v Heredoc vypsal.

Myslím, že by to nešlo ani s pomocí složených závorek, pomocí kterých lze vypsat např. hodnotu pole.

Nahoru Odpovědět
20.1.2014 20:43
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Milan Gallas
Tvůrce
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Milan Gallas:20.1.2014 20:51

Tak né no. Měl jsem za to, že to funguje.

 
Nahoru Odpovědět
20.1.2014 20:51
Avatar
Odpovídá na Milan Gallas
Martin Konečný (pavelco1998):20.1.2014 20:55

To se mi pak líbí např. u systému Latte, tam lze pomocí maker (psaných pomocí složených závorek) použít i cykly, podmínky apod.

Nahoru Odpovědět
20.1.2014 20:55
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na David Hartinger
Neaktivní uživatel:20.1.2014 20:56

Takže doporučuješ heredoc vůbec nepoužívat? Napadá mě příklad: Mám stránku, na které je n článků, ve kterých jsou naprosto stejné elementy. Jak to udělat jednodušeji bez heredoc? já osobně bych to udělal asi takto:

for (...){
  $name = $clanekData[i]->name;
  $imgSrc= $clanekData[i]->imgSrc;
  $text= $clanekData[i]->text;
  ...

  $clanek[] = <<<EOT
    <article>
       <h2>$name</h2>
       <img src="$imgSrc" ...>
       <p>$text</p>
       ...
    </article>
 EOT;

$clanky=implode($clanek);
}

a pak v šabloně měl jen

...
<section>
<?= $clanky ?>
</section>
...

Kde je chyba a jak to udělat lépe?

Nahoru Odpovědět
20.1.2014 20:56
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Petr Nymsa
Kit:20.1.2014 23:36

Zápis Heredoc ve tvém případě vypadá takto:

<h1>$nadpis</h1>
<article>$obsahClanku</article>
<p>Autor: $autor</p>
Nahoru Odpovědět
20.1.2014 23:36
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:20.1.2014 23:51

Po lehké úpravě by to mohlo vypadat třeba takto:

$seznamClanku = array();
foreach ($clanekData as $clanek) {
  $name = htmlspecialchars($clanek->name);
  $imgSrc = urlencode($clanek->imgSrc);
  $text = nl2br(htmlspecialchars($clanek->text));
  ...

  $seznamClanku[] = <<<EOT
    <article>
       <h2>$name</h2>
       <img src="$imgSrc" ...>
       <p>$text</p>
       ...
    </article>
EOT;
}
$clanky=implode('', $seznamClanku);

nebo třeba takhle:

$seznamClanku = array();
foreach ($clanekData as $clanek) {
  $seznamClanku[] = <<<EOT
    <article>
       <h2>$clanek->htmlName</h2>
       <img src="$clanek->urlImg" ...>
       <p>$clanek->htmlText</p>
       ...
    </article>
EOT;
}
$clanky=implode('', $seznamClanku);

Samozřejmě po doplnění nezbytných property do objektu $clanek.

Nahoru Odpovědět
20.1.2014 23:51
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Ori I
Člen
Avatar
Ori I:21.1.2014 1:52

nech sa na to pozeram ako dlho chcem ... mne ten Heredoce pride ako absolutna blbost .. nehnevaj sa Kit ale zapis tymto sposobom je zdhlavy, neprehladny a ako bolo povedane front end developer by sa v tom stratil.

Povec mi pekne este raz v com je to lepsie ako napriklad Smarty, ktory je maximalne prehladny ?

 
Nahoru Odpovědět
21.1.2014 1:52
Avatar
Zdeněk Bauer
Tvůrce
Avatar
Odpovídá na Ori I
Zdeněk Bauer:21.1.2014 3:23

Přikláním se k tvému názoru.
Ve svém e-shopu jsem pro šablony použil Smarty, neumím si to představit s Herodecem.

Ps.: Nezvrhla se ta diskuse už trošku?

Editováno 21.1.2014 3:23
 
Nahoru Odpovědět
21.1.2014 3:23
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Hartinger:21.1.2014 8:17

Chyba je v tom, že HTML má být v šabloně a ne v logice. Heredoc se nepoužívá, už jsem to psal, Kit ho našel při svých čteních manuálů a myslí si, že je to cool. Je naprostý nesmysl na tom stavět šablony. Diskuzi zavírám.

Nahoru Odpovědět
21.1.2014 8:17
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:21.1.2014 9:55

Přesunul jsem diskuzi o Heredoc do samostatného vlákna, aby nepřekážela v diskuzi o soutěži.

Nahoru Odpovědět
21.1.2014 9:55
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Zdeněk Bauer
Kit:21.1.2014 10:03

Heredoc se hodí i při psaní delších SQL dotazů. Nedovedu si představit, že bych u nich použil Smarty.

Nahoru Odpovědět
21.1.2014 10:03
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:21.1.2014 10:17

Takže naposledy. Nikoho nezajímá co děláš na svém projektu na 10 řádek ve VIMu, učíme tady jak to dělá zbytek světa. Pokud chceš na tomto fóru dále působit, přestaneš sem tahat tyto nesmysly, které praxi neviděli ani z vlaku nebo budeš muset jinam.

Nahoru Odpovědět
21.1.2014 10:17
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:21.1.2014 10:57

Myslel jsem si, že mi v diskuzi o Heredoc alespoň dovolíš odpovědět na dotazy těch, které Heredoc zajímá. Projekty na 10 řádek dělám rád, protože občas dokáží totéž, co projekty jiných programátorů na 2000 řádek. Využívám to, co mi PHP nabízí a co jiné jazyky nemají. Přece v PHP nebudu programovat stejným stylem jak v C# nebo Javě. To bych musel být blázen.

Nahoru Odpovědět
21.1.2014 10:57
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Kit
Petr Nymsa:21.1.2014 12:05

Jak ale pomocí Heredoc bude schopný pracovat kodér ? V reálných projektech udělá back-end developer funkcionalitu a kodér udělá šablony.

Nahoru Odpovědět
21.1.2014 12:05
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Petr Nymsa
Kit:21.1.2014 12:47

David Hartinger má pravdu v tom, že kodérů schopných pracovat ve Smarty nebo v Latte je mnohem víc, než kodérů schopných pracovat v Heredoc.

Na větší projekty používám SAX, DOM nebo šablonovací systém. Záleží na typu projektu. Výhodou je, že se dají psát objektově. Píši je jako plnohodnotné viewery zcela nezávislé na controllerech. Zpravidla si vystačím s jedinou šablonou na celý projekt.

Nevýhodou je, že kodéři Heredoc, SAX, DOM ani šablony většinou neznají. Bylo by dobré, kdyby se to konečně naučili.

Nahoru Odpovědět
21.1.2014 12:47
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 29 zpráv z 29.