Domů

V další části práce na naši komponentě jednoduchého diskusního fóra si povíme, jak využít parametry menu v Joomle, abychom mohli ovlivnit zobrazování dat při tvorbě menu a také jak se pracuje se stránkováním ve veřejné části komponenty, což si předvedeme na zobrazení sekce a kategorie našeho fóra.

Zobrazujeme příspěvky

Začneme u modelu - tentokrát si vytvoříme modely section pro zobrazení sekce a category pro zobrazení kategorie. V případě sekce si necháme vypsat kategorie patřící do dané sekce a také všechny příspěvky, které do dané sekce patří. U kategorie, pak pouze příspěvky z dané kategorie. Příspěvky řadíme podle data přidání.

Stránkování a podšablony

V konstruktoru třídy pro výpis obsahu sekce si získáme id aktuální sekce a následně stránkovací údaje - _limitstart pro pořadové číslo prvního načteného záznamu a _limit pro to kolik záznamu chceme získat. Všimněme si, že pouze proměnnou _limit pro počet záznamů na stránku získáváme pomocí metody getUserStateFromRequest(), proměnnou _limitstart je nutné získat pomocí třídy JRequest. Je to z důvodů toho, že proměnnou _limitstart získáváme pouze při kliknutí na odkazy na předchozí/další stránku a při změně počtu záznamů na stránku je třeba proměnnou _limitstart vynulovat:

 

        function __construct() {
    parent::__construct();
    $this->_id=JRequest::getInt('id');
    $this->_limitstart=JRequest::getInt('limitstart',0);
    $this->_limit=JFactory::getApplication()->getUserStateFromRequest(JRequest::getCmd('option').'.'.JRequest::getCmd('view').'.'.'limit','limit',JFactory::getApplication()->getCfg('list_limit'),'int');
  }

 

Data všech kategorií v dané sekci získáme obvyklým způsobem metodou getData(), stejně tak i údaje pro drobečkovou navigaci metodou getPageData(), které představuje id a titulek aktuální sekce. Jelikož u příspěvků chceme použít stránkování, zavoláme metodu _getList() s SQL dotazem, číslem prvního příspěvku a počtem příspěvků na stráncejako parametry - pro ty kdo to od dílů o administraci zapomněli. Zbývá nám získat již jenom objekt pro stránkování.

Pohled si připravíme obvyklým způsobem. Zde pouze uvedu dvě upřesnění z minulého dílu, kde jsem je zapomněl zmínit. Konstruktoru objektu parametrů je vhodné předat parametry menu v ošetřené podobě následujícím způsobem:

 

    $menu=JFactory::getApplication()->getMenu()->getActive();
    $params=new JParameter(is_object($menu)?$menu->params:null);

 

Je to z důvodů toho, že v případě, že danou stránku voláme jinak než z menu, tak objekt aktivního menu pochopitelně neexistuje a proto také nemůže obsahovat atribut params. Totéž platí i pro drobečkovou navigaci:

 

    if(!is_object($menu)) {
      $nav=JFactory::getApplication()->getPathway();
      $nav->addItem(JText::_('Simple Forum'),JRoute::_('index.php?option=com_simpleforum&view=sections'));
      $nav->addItem($params->get('page_title'));
    }

 

V tomto případě ale zajišťujeme, že se položky v drobečkové navigaci zobrazí pouze jednou. Jinak by se zobrazila jak drobečková navigace menu, tak i navigace pocházející z daného pohledu, což ve většině případů není žádoucí. Samotné zobrazení si připravíme trošku zvláštním způsobem:

 

<?php if($this->params->def('show_page_title',1)) {
  ?>
  <div class="componentheading">
    <?php echo $this->params->get('page_title'); ?>
  </div>
  <?php
}
echo $this->loadTemplate('categories');
echo $this->loadTemplate('posts');
?>

 

Na konci kódu si můžeme všimnout volání metody loadTemplate() třídy JView. Tato metoda vrátí soubor v adresáří tmpl ve tvaru typ_zobrazeni_jmeno.php, kde jmeno odpovídá parametru zadanému do metody a prefix typ_zobrazení aktuálnímu typu zobrazení. V tomto případě se načtou soubory default_categories.php a default_posts.php. Jelikož metoda pouze vrací obsah těchto podšablon, tak je musíme ještě vytisknout příkazem echo. V případě jednoduchých pohledů takovou funkci asi neupotřebíme, ale v případě rozsáhlejších projektů jí jistě doceníme. Navíc tím umožníme i jednodušší přepis pohledů pomocí šablony, kdy stačí přepsat pouze danou část pohledu v případě, že nám výchozí od autora komponenty nevyhovuje.

Kategorie si vypíšeme klasicky do nečíslovaného seznamu. Stejně tak i samotné příspěvky. U příspěvků si v tomto díle zavedeme ještě nový parametr a tím je datum přidání příspěvků, na kterém si ukážeme jak v Joomle pracovat s datem a časem. Pro zobrazení data v určitém formátu v pohledu slouží metoda date třídy JHTML. Ta potřebuje jako povinný parametr samozřejmě řetězec data a jako druhý nepovinný parametr lze předat formát v jakém chceme datum zobrazit podle PHP funkce strftime():

      <td><?php echo JHTML::_('date',$this->posts[$i]->dateadd,"%d.%m.%Y %H:%M:%S"); ?></td>

 

Následuje zobrazení samotného stránkování, u kterého si je nutné uvědomit, že musí být obaleno ve formuláři:

 

<form action="" method="post" name="adminForm" id="adminForm">
<?php echo $this->pagination->getLimitBox(); ?><br />
<?php echo $this->pagination->getPagesLinks(); ?><br />
<input type="hidden" name="option" value="com_simpleforum" />
<input type="hidden" name="view" value="section" />
<input type="hidden" name="id" value="" />
</form>

 

Třída pro stránkování obsahuje několik metod, zde vyžijeme dvě hlavní a to getLimitBox(), která jak z názvu vyplývá zobrazí selectbox pro počet záznamů na stránku a následující getPagesLinks(), která zobrazí odkazy na předchocí/následující stránku. U formuláře narazíme v atributu action na další odlišnost veřejné části od administrace. V administraci stačilo uvést pouze index.php a o více jsme se nemuseli starat, ve veřejné části je nutné zadat kompletní URL adresu, protože jinak bychom se dostali titulní stránku.

Parametry menu

Parametry menu se nacházejí v souboru typ_pohledu.xml v adresáří tmpl daného pohledu. Tento soubor obsahuje dvě části - layout a state. Samotné parametry se nacházejí v části state, o které si povíme za chvilku. Část layout obsahuje pouze informační data a to název daného pohledu v parametru title a popis daného pohledu v tagu message. Část state obsahuje stejná data v tazích name a description. Samotné parametry menu je možné zadat dvěma způsoby a to do tagů params a url. Prvně jmenovaný zajistí, že se vybrané parametry uloží k aktuální položce menu a přístup k ním máme před objekt aktivní položky menu(jako třeba k titulky stránky page_title), nebo v případě umístění do rodičovského tagu url se objeví v URL adrese. Do URL adresy je vhodné umístit takové parametry, které jsou v přímém vztahu s tvorbou odkazů, aby mezi stránkami z daným pohledem dokázaly rozšíření pro tvorbu SEF URL rozlišovat, jelikož tyto rozšíření na parametry menu, které nejsou v URL adrese neberou zřetel. Samotný parametr tvoříme pomocí tagu param.

<?xml version="1.0" encoding="utf-8"?>
<metadata>
        <layout title="SECTION LAYOUT">
                <message>
                        <![CDATA[SECTION LAYOUT DESC]]>
                </message>
        </layout>
        <state>
                <name>SECTION LAYOUT</name>
                <description>SECTION LAYOUT DESC</description>
                <url addpath="/administrator/components/com_simpleforum/elements/">
                     <param name="id" type="sfsection" label="Section" />
                </url>
        </state>
</metadata>
 

 

Jelikož typů parametrů je více, tak pouze uvedu odkaz na jejich seznam: http://docs.joomla.org/Standard_parameter_types a zaměřím se na trošku neobvyklejší situaci, kdy potřebujeme data načíst z databáze a nějak je zpracovat. Jak tag params, tak i url podporují atribut addpath, který určuje cestu k nově vytvořeným parametrům. V tomto adresáří vytvoříme PHP soubor pojmenovaný podle názvu uvedeného v parametru type tagu param. V tomto případě se soubor jmenuje sfsection.php. Tento název musí obsahovat pouze alfanumerické znaky, tedy žádné podtržítka ani mezeru. Třída v tomto souboru pojmenovaní JElementType, kde Type je opět hodnota z parametru type musí rozšiřovat základní třídu JElement. Z té překryjeme metodu fetchElement, se čtyřmi parametry v tomto pořadí jméno parametru(atribut name) - name, hodnota atributu - value, DOM objekt pro přístup k atributům daného tagu param - node a jméno skupiny daného parametru (o tom si povíme za chvilku) - control-name:

class JElementSFSection extends JElement {
  function fetchElement($name,$value,$node,$control_name) {
    $db=JFactory::getDBO();
 
    $query="SELECT id, title \n";
    $query.="FROM #__sf_sections \n";
    $query.="ORDER BY title \n";
    $db->setQuery($query);
    $sections_ol=$db->loadObjectList();
 
    return JHTML::_('select.genericlist',$sections_ol,$control_name."[".$name."]",'class="inputbox" size="1"','id','title',$value,$control_name.$name);
  }
}

 

V metodě si je dobré všimnout, že nemáme k dispozici výchozí objekt pro databázi a musíme jej získat ručně. Položky z tabulky sekcí si načteme nám již známým způsobem a vrátíme selectbox, který je nutné pojmenovat ve skupina_parametru[jmeno] a také mu přířadit atribut id ve tvaru skupina_parametrujmeno.

Před chvíli jsem se zmínil o skupinách parametrů. Jedná se o záložky jako Parametry - Základní, nebo Pokročilé parametry při editaci položky menu.  Do Základních parametrů se umísťují položky uvedené v tazích url, nebo params. V případě, že chceme daný parametr umístit do záložky pokročilé, tak je nutné jej umístit do rodičovského tagu advanced. Tyto položky ale nejde umístit do URL adresy. Existuje ještě jedna skupina parametrů a to parametry komponenty. O těch si povíme v příštím díle.

Přímo v adresáři samotného pohledu je nutné umístit ještě jeden soubor a to metadata.xml, která obsahuje texty, které se zobrazí při výběru pohledu při zakládání položky menu. Název pohledu se nachází v parametru title tagu view a popis pohledu v tagu message:

<?xml version="1.0" encoding="utf-8"?>
<metadata>
    <view title="Section">
        <message><![CDATA[SECTIONDESC]]></message>
    </view>
</metadata>

 

V případě, že nechceme, aby se daný pohled při tvorbě menu nabídnul máme dvě možnosti. Tou první je umístit do jména pohledu podtržítko. Název pohledu ve veřejné části totiž může obsahovat pouze alfanumerické znaky bez mezer a právě podtržítko, které je bráno jako speciální znak tento případ. Druhou možností je do souboru metadata.xml umístit do tagu view parametr hidden s hodnotou true. A co v případě, že chceme skrýt pouze daný typ zobrazení. Ani zde nás nečeká složitější situace. Stačí do souboru typ_pohledu.xml do tagu layout umístit stejný parametr.

Co se týče překladu řetězců uvedených v těchto XML souborech, tak pro ně platí stejná pravidla jako pro řetězce v metodě JText::_(). Pouze je nutné je umístit do překladu administrační části jelikož se zobrazujou v administraci.

Zobrazení kategorie provedeme podobným způsobem.

Příště

Příště ukončíme část našeho seriálu věnovanou samotné komponentě a to pomocí formuláře pro zadávání příspěvků, kde si ukážeme použití WYSIWYG editoru a nezapomeneme ani na globální parametry komponenty. Aktuální stav komponenty naleznete zde.

Komentářů (0)
Přidat komentář
YOUR_CONTACT_DETAILS:
Komentářů:
[b] [i] [u] [s] [url] [quote] [code] [img]   
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
SECURITY
Prosím=vložte text z obrázku (anti-SPAM ochrana

Zprávičky

Napsat novou zprávičku  |  Vše

sh404SEF 2.0.3.545

Nová verze

Napsal Peter Smrčák | 13.08 22:12

Kunena 1.6 RC1

Nová verze

Napsal Peter Smrčák |  9.08 15:28

Vyšla nová Kunena RC1 pre pripravovanú Joomlu 1.6.

EasyBook reloaded!

Nová verze

Napsal Peter Smrčák |  4.08 06:41

Vyšla stabilná verzia obľúbenej návštevnej knihy EasyBook reloaded vo verzii 2.0.4.

VirtueMart 1.1.5

Nová verze

Napsal Peter Smrčák | 28.07 15:11

Práve vyšiel nový VirtueMart.

Táto verzia opravuje rôzne problémy.

changelog | download

Joomla 1.5.19

Bezpečnost

Napsal Filip Bartmann | 16.07 18:30

Dnešním dnem spatřila světlo světa další aktualizace stabilní řady Joomly 1.5, tentokrát s pořadovým číslem 19 a kódovým jménem Wojmamni ama batani. Jedná se o opravu několika menších bezpečnostních chyb v administraci a také novou verzi js frameworku Mootools.

Více...

Jméno Joomla!® je použito pod limitovanou licenci od Open Source Matters ve Spojených státech a ostatních zemích. Joomladev nemá spojení s Open Source Matters, nebo projektem Joomla! a není součástí jejich podpory
Logo Joomla!® je použito pod limitovanou licenci od Open Source Matters ve Spojených státech a ostatních zemích. http://joomladev.eu nemá spojení s Open Source Matters, nebo projektem Joomla! a není součástí jejich podpory