Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)
Avatar
Kit
Redaktor
Avatar
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 Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka: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  +4 20.1.2014 17:54
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
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
Nesnáším {}, proto se jim vyhýbám.
Avatar
Kit
Redaktor
Avatar
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
Redaktor
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
Redaktor
Avatar
Odpovídá na David Čápka
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
Redaktor
Avatar
Odpovídá na David Čápka
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  +1 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
Nesnáším {}, proto se jim vyhýbám.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Milan Gallas
Kit:20.1.2014 18:11

Nemohu za to, že Heredoc se David Čápkavi 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
Redaktor
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  +2 20.1.2014 18:20
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Michal Martinek
Redaktor
Avatar
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
Redaktor
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
Redaktor
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
Redaktor
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
Jiří Gracík
Redaktor
Avatar
Jiří Gracík: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  +1 20.1.2014 20:56
Creating websites is awesome till you see the result in another browser ...
Avatar
Kit
Redaktor
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
Redaktor
Avatar
Odpovídá na Jiří Gracík
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
Člen
Avatar
Ori: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
Redaktor
Avatar
Odpovídá na Ori
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  +1 21.1.2014 3:23
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Jiří Gracík
David Čápka: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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
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
Redaktor
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 Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka: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  ±0 21.1.2014 10:17
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
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
Redaktor
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
Redaktor
Avatar
Odpovídá na Petr Nymsa
Kit:21.1.2014 12:47

David Čápka 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  ±0 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.