DomůDokumentaceKomponentyZáklad administrace

Ve druhém pokračování návodu na tvorbu komponent si napíšeme první řádky kódu naší komponenty, konkrétně si ukážeme první kroky administrace naší komponenty.

Vstup do komponenty

Vstupní soubor komponenty se musí v administraci jmenovat admin.jmenokomponenty.php a provádíme v něm jedinou akci, inicializujeme controller a spouštíme akci(task).

  1. <?php
  2.  
  3. defined('_JEXEC') or die('Restricted access');
  4.  
  5. $controller=JRequest::getCmd('controller');
  6. $controllerName='SimpleForumController'.$controller;
  7.  
  8. if(strlen($controller)) {
  9. require_once dirname(__FILE__).DS.'controllers'.DS.$controller.'.php';
  10. } else {
  11. require_once dirname(__FILE__).DS.'controller.php';
  12. }
  13.  
  14. $class=new $controllerName();
  15. $class->execute(JRequest::getCmd('task'));
  16. $class->redirect();
  17. ?>

Jako první(na řádku 3) musíme zakázat přímý přístup do skriptu, abychom zbytečně neprozrazovali vnitřní strukturu aplikace, a taky jej nešlo načíst mimo kontext Joomly. Dále pokračujeme tím, že si zjistíme pomocí metody getCmd() třídy JRequest, která slouží k ošetřenému načítání dat z proměnných jako $_GET, $_POST(o verzi pro získání normálních proměnných si povíme v některém s příštích dílů), jméno controlleru, který chceme spustit a na 6 řádku jej převedeme do standardní podoby, která musí mít tvar NazevkomponentyControllerElement, přičemž pokud Element vynecháme, tak se bude jednat o výchozí controller, který využijeme spíše ve veřejné části, i když jej lze použít i v administraci Joomly. O výchozím controlleru si povíme za chvilku. Ve funkci require_once si můžete všimnout řetězce DS, je zkratkou z anglického directory separator, což česky znamená oddělovač adresářů. Je zavedený z důvodů kompatibility Joomly mezi platformami Windows a Linux.

Následuje podmínka, která posle toho jestli je v proměnné $controller nějaký element, tak načte buď controller pro daný element, nebo výchozí, který umísťuji přimo do kořenového adresáře komponenty. Zbytek kódu se stará o vytvoření instance controlleru a spuštění úlohy(metoda execute()). Jako poslední zavoláme metodu pro přesměrování na cílovou stránku.

Výchozí controller

  1. <?php
  2. defined('_JEXEC') or die('Restricted access');
  3.  
  4. jimport('joomla.application.component.controller');
  5.  
  6. class SimpleForumController extends JController {
  7. function __construct($config=array()) {
  8. parent::__construct($config);
  9. }
  10.  
  11. function display() {
  12. JRequest::setVar('view',JRequest::getCmd('view','posts'));
  13. JRequest::setVar('layout',JRequest::getCmd('layout','default'));
  14.  
  15. parent::display();
  16. }
  17. }
  18. ?>

Výchozí controller opět začneme zakázáním přímého vstupu. Následovat musí vložení kostry controlleru pomocí funkce jimport(), která ošetří vložení kódu z jádra Joomly. Pro vkládání pomocí funkce jimport() se použuje jako hlavní adresář /libraries/ a místo oddělovače adresářů se používá .(tečka). Pokračujeme definici třídy controlleru, která musí rozšiřovat (extends) základní controller JController. Konstruktor musí obsahovat jeden parametr, typu pole, který je nutné také předat rodičovskému kontrolleru ve volání(parent::__construct()).

Funkce display() nám zastupuje výchozí akci(task), takže se skvěle hodí do výchozího controlleru, ve kterém ošetříme přístup přes proměnnou view v URL. Jedná se o druhý formát URL adresy Joomly, který využijeme hlavně ve veřejné části, ale nic nám nebrání použít jej i v administraci. Tento tvar vypadá následovně:

index.pnp?option=com_componenta&view=pohled&layout=zobrazeni

Právě tento tvar ošetřujeme v naší funkci display(). View je rozděleno do dvou úrovní. První nám říká, jméno pohledu a další úroveň nám určuje zobrazení. Standardně se v Joomle používají dva typy zobrazení - default pro listing(tabulku) a form pro zadávací formulář. Ve funkci display() udáváme, že pokud zadáme URL ve tvaru index.php?option=com_componenta, tak se jako výchozí pohled použije posts a jako výchozí zobrazení default, nebo-li tabulka. Toto určujeme metodou JRequest::setVar(), která příjímá dva parametry - jméno proměnné a její hodnotu, kterou získáváme naší známou funkcí JRequest::getCmd(). Zde vidíme, že tato metoda přijímá ještě druhý parametr, který určuje výchozí hodnotu. Na závěr této funkce musíme předat řízení Joomle pomocí parent::display().

Druhým tvarem URL, který v administraci využijeme hlavně se budeme zabývat v příští části tohoto návodu.

Objektově-relační mapování

Tento díl zakončíme podrobnostmi o objěktově-relačním mapováním, nebo-li přiřazení třídy k tabulce.

  1. <?php
  2. defined('_JEXEC') or die('Restricted access');
  3.  
  4. class TablePosts extends JTable {
  5. var $id=null;
  6. var $title=null;
  7. var $description=null;
  8. var $section_id=null;
  9.  
  10. var $checked_out=null;
  11. var $checked_out_time=null;
  12.  
  13. function __construct($db) {
  14. parent::__construct('#__sf_posts','id',$db);
  15. }
  16. }
  17. ?>

Tyto soubory, se nacházejí, jak jsem zmínil minule, v administrační části komponenty v adresáři /tables/ a jméno souboru musí odpovídat názvu třídy bez části Table, takže v našem příkladu by jméno souboru vypadalo posts.php. Tato třída musí rozšiřovat základní třídu pro práci s tabulkami JTable. Zde ji ovšem nemusíme ručně vkládat, protože Joomla to za nás udělá automaticky. Následuje jednoduchá definice položek dané tabulky, kterým přiřazujeme jako výchozí hodnotu null. Zmínku si zaslouží pouze dvě speciální položky, checked_out a checked_out_time, které musí každá tabulka obsahovat a popořadě určují id uživatele z tabulky jos_users, který daný záznam právě edituje a dále datum a čas edtace(checked_out_time).

Do konstruktoru předáváme objekt třídy pro práci s databázi a voláme konstruktor předka, v jehož parametrech nalezneme jméno tabulky, primární klíč tabulky a objekt databáze. V názvu tabulky se nachází podivná kombinace znaků #__, která je klíčem k různým prefixům instalací Joomly, protože znaky #_ jsou při dotazu na databázi nahrazeny za prefix instalace Joomly, což je ve výchozím stavu jos.

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