Kombinování PHP a HTML kódu
Jste zde
PHP a HMTL kód lze kombinovat, samozřejmě za předpokladu, že jsou jednotlivé části kódu náležitě odděleny. Do PHP kódu můžete zanořit HTML, ale můžete udělat i opak - do HTML kódu vložit PHP. Použijeme víceméně jen postupy, které jsme se už naučili ve výše uvedených příkladech.
Technická odbočka
Protože blok Execute PHP, který nyní používáme, neumí zpracovat HTML kód, použijeme nyní pro testování jiný postup.
Na stránce administrace modulů zapněte modul PHP filter. Ten vám umožní vkládat PHP kód všude, kde to Drupal v administraci standardně umožňuje.
Měli byste vědět, že vkládání PHP kódu přes administrační rozhraní je dobré se vyhnout, pokud to jen trochu jde. Je to povolená, ale krajní možnost, jak v Drupalu něčeho dosáhnout. K testovacím účelům nám však nyní tato funkcionalita skvěle poslouží.
Na stránce administrace bloků si vytvořte vlastní nový blok. Nazvěte ho Testování PHP. Jako obsah bloku zadejte nějaký pokusný text, pro změnu například:
Ahoj <strong>Squelle!</strong>
Blok uložte, zatím s výchozím formátem Filtrované HTML.
Dostanete výsledek: Ahoj Squelle!
Pokud máte zapnutý WYSIWYG editor, vypněte ho, nebo ho deaktivujte pro daný blok. Tím máte připravené podmínky pro další práci.
PHP uvnitř HTML kódu
Uvnitř HTML kódu vložíte PHP prostě tak, že ho oddělíte počátečním a koncovým tagem:
(...) HTML <?php (...) ?> HTML (...)
Nyní zkuste upravit výše uvedený příklad:
Ahoj <strong><?php print 'Squelle'; ?></strong> !
Pozor:
Aby se PHP kód projevil, musíte jako formát bloku zvolit PHP kód.
Dostanete opět výsledek: Ahoj Squelle!
Nyní trochu přiblížíme příklad praktickému využití:
<?php $company = 'Squelle'; ?> Ahoj <strong><?php print $company; ?></strong>!
Obrdžíte stejný výsledek, ale s tím rozdílem, že název firmy nyní můžete vypisovat dynamicky, pomocí proměnné $company
.
HTML uvnitř PHP kódu
Nyní vyzkoušíme opak.
<?php print "Ahoj <strong>Squelle</strong>!"; ?>
Na příkladu je vidět, že součástí řetězce, který vypisujete příkazem print
(nebo echo
) může být i HTML kód.
V tuto chvíli se dostaneme k jednomu důležitému rozdílu mezi použitím dvojitých a jednoduchých uvozovek. Pokud použijete dvojité uvozovky, můžete přímo v rámci řetězce vypsat proměnnou, která bude správně interpretována.
Vyzkoušejte:
<?php $company = 'Squelle'; print "Ahoj <strong>$company</strong>!"; ?>
Výsledek: Ahoj Squelle!
Srovnejte s použitím jednoduchých uvozovek:
<?php $company = 'Squelle'; print 'Ahoj <strong>$company</strong>!'; ?>
Výsledek: Ahoj $company!
Při výpisu HTML v kombinaci s proměnnými se ovšem v Drupalu převážně setkáte s jednoduchými uvozovkami. Pak je nutné vypisované řetězce vždy oddělit od proměnných a jednotlivé části spojit tečkou .
(řetězcovým operátorem, se kterým jste se už výše seznámili).
Odpovídající příklad bude vypadat následovně:
<?php $company = 'Squelle'; print 'Ahoj <strong>' . $company . '</strong>!'; ?>
Výsledek: Ahoj Squelle!
Uvedený způsob zápisu vám zpočátku může připadat krkolomný, ale používá se velmi často a pravděpodobně si na něj rychle zvyknete. Pro přehlednost kódu se tečka z obou stran odděluje mezerou (patří to ke standardům psaní kódu v Drupalu).
Obdobný, ale složitější příklad, který vám umožní zopakovat si také něco z předchozích kapitol (napište si ho určitě předem do editoru, který zvýrazňuje syntaxi):
<?php $company = 'Squelle'; $link = 'http://www.squelle.com'; $cms = 'Drupal'; $state = 'skvěle'; global $theme; ?> <h4>Kombinování PHP a HTML</h4> <!-- Všimněte si, že PHP kód můžete vložit i dovnitř HTML tagu. Musíte ovšem dávat pozor na to, kdy jste uvnitř PHP a kdy uvnitř HTML, třeba proto, abyste použili správný kód pro označení komentáře --> <p>Ahoj! Právě si zkouším kombinaci PHP a HTML z návodu od <a href=" <?php print $link; ?> "> <?php print $company; ?></a>. <?php // Proměnnou $link už jsme použili; nyní jí můžeme klidně přiřadit jinou hodnotu $link = 'http://www.drupal.org'; ?> <br /> Používám CMS <a href=" <?php print $link; ?> "> <?php print $cms; ?> </a> a v tuto chvíli mám nastavené téma vzhledu <strong><?php print $theme ?></strong>.<br /> Daří se mi to <strong><?php print $state; ?></strong>!</p>
Výsledek: