|
28 Červenec 2009
Posted in
Články -
Tipy a triky
Určitě jste již narazili na situaci, kdy jste chtěli, aby nějaký článek zůstal na stránce jako první, ale Joomla jej pořád odsouvá, pod nejnovější článek a vy jej musíte stále ručně posouvat nahoru. Řešení na opravu tohoto problému je přitom velmi jednoduché.
Administrace
Formulář
Začátek naších úprav začneme v administraci Joomly v souboru /administrator/components/com_content/models/article.xml, kde se nachází definice položek vedle článku. Zde si přidáme položku, která nám bude určovat přišpendlení článku:
<param name="sticky" type="radio" default="0" label="Sticky"> <option value="0">No</option> <option value="1">Yes</option> </param>
Následně musíme do tabulky přidat sloupec s názvem sticky, což provedeme asi v PHPMyAdminu zadáním příkazu:
ALTER TABLE jos_content ADD sticky int(1) NOT NULL DEFAULT '0';
Tento sloupec také musíme přidat do mapování Joomly, které se nachází v souboru /libraries/joomla/database/table/content.php přidáním řádku:
var $sticky=null;
na začátek třídy JTableContent.
Tímto máme zajištěno ukládání této hodnoty v administraci.
Tabulka článků
Jestliže chceme, mít možnost přepínat přišpendlení článku stejně jako třeba zobrazení na titulce v přehledu článků podíváme se do souboru /administrator/components/com_content/admin.content.html.php, kde si najdeme funkci showContent(). Jak si můžete všimnout jedná se o komponentu ještě ne plně převedenou do nového MVC stylu Joomly. Zde si ve druhé tabulce najdeme sekci thead a na požadované místo vložíme:
<th>
<?php echo JHTML::_('grid.sort', 'Sticky', 'sticky', @$lists["order_Dir"],@$lists["order"] ); ?>
</th>
To tbody vložíme do odpovídajícího sloupce:
<td align="center"> <a href="javascript:void(0);" onclick="return listItemTask('cb','toggle_sticky');" title=""> <img src="images/" alt="" width="16" height="16"/> </a> </td>
Jelikož jak jsem před chvilkou zmínil administrace článku ještě není plně přizpůsobená novému stylu Joomly, tak nejprve musíme v souboru admin.content.php přidat do switche podmínku:
case 'toggle_sticky': ContentController::toggleSticky(); break;
Následuje poslední krok a to přidání metody do souboru controller.php:
function toggleSticky() { $app=JFactory::getApplication(); $cid=JRequest::getVar('cid',array('0'),'post','array'); $db=JFactory::getDBO(); $query="SELECT sticky FROM #__content \n"; $query.="WHERE id=".$cid[0]; $db->setQuery($query); $sticky=(int)$db->loadResult(); if($sticky==1) { $nsticky=0; } else { $nsticky=1; } $query="UPDATE #__content SET sticky=".$nsticky." \n"; $query.="WHERE id=".$cid[0]; $db->setQuery($query); $db->query(); $app->redirect('index.php?option=com_content'); }
Pokud v Joomle teprve začínáte programovat, předchozí kód je ukázka toho, jak rozšíření v Joomle rozhodně nemá vypadat. Přechozí řádky přijdou do části Model, nikoliv Controlleru, který pouze řídí odpovědi na uživatelské akce, tento stav je způsoben nedokončeným přepsáním Joomly.
Veřejná část
Zobrazení
Dále pokračujeme do veřejné části, kde musíme vyřešit řazení podle této hodnoty a také její ukládání při zadávání článku z veřejné části. Pro nedočkavce začneme jak seřadit články podle parametry sticky(Přilepení). Úpravy provedeme v souborech category.php a frontpage.php v adresáři /components/com_content/models. Ve všech souborech si najdeme metodu _buildContentOrderBy a řádek:
$orderby = ' ORDER BY ';
nahradíme za
$orderby = ' ORDER BY a.sticky DESC, ';
Pouze v souboru frontpage.php tento řádek vypadá:
$orderby = ' ORDER BY '.$primary.' '.$secondary;
takže jej upravíme na:
$orderby = ' ORDER BY a.sticky DESC, '.$primary.' '.$secondary;
čímž zajistíme, že články označené jako přišpendlené se budou zobrazovat nejdříve.
Editace článku
Pokud chceme, aby i uživatelé ve veřejné části si mohli volit jestli má být článek přišpendlený, změnu provedeme v souboru /components/com_content/views/article/tmpl/form.php. Do tabulky pod článkem přidáme nový řádek:
<tr> <td class="key"> <label for="sticky"> </label> </td> <td> <?php echo JHTML::_('select.booleanlist','sticky','class="inputbox"',$this->article->sticky); ?> </td> </tr>
Překlad
Pokud chceme mít popisek v Sticky v administrační části v češtiíne stačí do souboru /administrator/language/cs-CZ/cs-CZ.com_content.ini přidat řádek:
STICKY=Přišpendlený
Totéž provedeme pro veřejnou část v souboru /language/cs-CZ/cs-CZ.com_content.ini
Články


