Avatar
Kit
Redaktor
Avatar
Kit:

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:

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):

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:

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:

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:

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:

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
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:

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:

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:

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):

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:

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:

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):

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
Avatar
Milan Gallas
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Milan Gallas:

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):

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
Avatar
Jiří Gracík
Redaktor
Avatar
Jiří Gracík:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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.