|
23 Červenec 2010
Posted in
Články -
Tipy a triky
Obvykle je kód JavaScriptu s stylování CSS pevně dáno js souborem, nebo souborem se styly CSS, které se zapisují do příslušných atributů tagů script, nebo link. V tomto článku se podíváme na trošku neobvyklou možnost, jak je v Joomle vygenerovat dynamicky pomocí PHP.
Začneme v přípravě pohledu - v souboru view.html.php, kam přidáme následující kód:
JFactory::getDocument()->addScript('index.php?option=com_my_component&controller=mycontroller&task=get_translations');
Pokud chceme generovat dynamicky css pouze místo metody addScript() použujeme addStyleSheet(). Z předchozího kódu poznáváme, že do atributů tagů link, nebo script zadáváme volání PHP skriptu. Pro méně zkušenější to může vypadat trošku divně, ale vysvětlení je jednoduché. WWW prohlížeči stačí obdržet kód daného MIME typu (pro JavaScript text/javascript a pro css text/css) a je mu jedno jestli se jedná o soubor někde na disku, nebo o dynamicky generovaná data. Správnou hlavičku nastavíme v ovladači(controlleru) mycontroller v metodě get_translations:
function get_translations() { header("Content-type: text/javascript"); echo $this->_model->getTranslations(); JFactory::getApplication()->close(); }
Jak jste již z názvu metody zajisté poznali v tomto příkladu si ukážeme jak navázat překladový systém Joomly do JavaScriptových kódů, aniž bychom si museli špinit stránku přímo vloženým JavaScriptovým kódem. V ovladači hlavně nastavíme odpovídající hlavičku a nakonec nesmíme zapomenout na volání metody close() Joomly, aby se nám do vygenerovaného textu nedostal kód Joomly, ale pouze to co vygenerujeme v metodě getTranslations() modelu.
V modelu si v odpovídající funkci pouze vygenerujeme JavaScriptový kód:
function getTranslations() { $text=""; $text.="var must_be_filled=\"".JText::_('This item must be filled in')."\";\n"; return $text; }
V kódu javascriptu lze pak použít zápis alert(must_be_filled) a máme přeložený řetězec. V případě, že chceme takto dynamicky generovat CSS styly, stačí pouze změnit v hlavičce Content-type na text/css. Nemusíme se omezovat pouze na JavaScript, nebo CSS, stejným způsobem lze v Joomle generovat i obrázky. Důležité je pouze nezapomenout na medotu close() Joomly.
Články


