web-dev-qa-db-fra.com

Catégorie de composants Joomla 3 helloworld

Après avoir suivi le document Joomla " Développement d'un composant MVC " jusqu'à l'étape 15 - "Ajout de la liste de contrôle d'accès", tout fonctionne. Ensuite, j'ai essayé d'ajouter une nouvelle vue "catégorie", mais cela n'a pas fonctionné.

Voici mon code:

Dans le dossier admin fields j'ai créé un hellocategory.php avec le même code que helloword, il suffit de changer

protected $type = 'HelloCategory';

/**
 * Method to get a list of options for a list input.
 *
 * @return  array  An array of JHtml options.
 */
protected function getOptions()
{
    $db    = JFactory::getDBO();
    $query = $db->getQuery(true);
    // custom
    $query->select('#__categories.id as id,#__categories.title as category,#__categories.extension as exten');
    $query->from('#__categories');  
    $query->where($db->quoteName('extension') . ' LIKE '. $db->quote('com_helloworld'));
    // end custom
    $db->setQuery((string) $query);
    $messages = $db->loadObjectList();
    $options  = array();
    if ($messages)
    {
        foreach ($messages as $message)
        {
            $options[] = JHtml::_('select.option', $message->category);
        }
    }

    $options = array_merge(parent::getOptions(), $options);

    return $options;

view.html.php

class HelloWorldViewCategory extends JViewLegacy
{
    /**
     * Display the Hello World view
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void
     */
    function display($tpl = null)
    {
        // Assign data to the view
        $category = $this->get('Item');

        // Check for errors.
        if (count($errors = $this->get('Errors')))
        {
            JLog::add(implode('<br />', $errors), JLog::WARNING, 'jerror');

            return false;
        }

        // Display the view
        parent::display($tpl);
    }
}

default.xml

<layout title="Category">
        <message>category</message>
</layout>
<fields
        name="request"
        addfieldpath="/administrator/components/com_helloworld/models/fields"
        >
    <fieldset name="request">
        <field
                name="id"
                type="hellocategory"
                label="COM_UNOFD_UNOFD_FIELD_GREETING_LABEL"
                description="COM_UNOFD_UNOFD_FIELD_GREETING_DESC"
                />
    </fieldset>
</fields>

default.php

<?php var_dump($category); ?>

output is Null

Le menu Admin fonctionne, mais le client ne peut obtenir aucun élément dans les données de cette catégorie. Existe-t-il des informations sur le développement d'un document avec vue de catégorie unique ou d'un exemple en ligne? J'ai essayé Google pour solution quatre jours, mais toujours aucune idée, ou le seul moyen est d'obtenir des données de la base de données? Merci beaucoup!

var_dump ($ this) va sortir

    object(HelloWorldViewCategory)#223 (15) { ["_name":protected]=> string(8) "category" ["_models":protected]=> array(0) { } ["_basePath":protected]=> 

string(55) "/var/www/clients/client0/web11/web/components/com_helloworld" ["_defaultModel":protected]=> NULL ["_layout":protected]=> string(7) "default" ["_layoutExt":protected]=> string(3) "php" ["_layoutTemplate":protected]=> string(1) "_" ["_path":protected]=> array(2) { ["template"]=> array(2) { [0]=>

 string(79) "/var/www/clients/client0/web11/web/templates/protostar/html/com_helloworld/category/"  bla bla bla....
3
Anthony

Edit: OK, maintenant nous avons le bas de votre méthode getOptions (), le problème est dans la méthode display () de votre vue. La catégorie $ est uniquement disponible dans la portée locale de cette méthode, vous devez en faire une propriété de classe.

Dans display () change:

$category = $this->get('Item');

à

$this->category = $this->get('Item');

Dans default.php:

var_dump($this->category);
1
chrBrd

Je vous suggère d'utiliser le lien vers index.php?option=com_categories&extension=com_YOUREXTENSION.

Et ajouter /helpers/yourextension.php fichier qui générera un menu en ayant la méthode

public static function addSubmenu($vName)
    {
        JHtmlSidebar::addEntry(
            JText::_('COM_YOUREXTENTION_ENTRY_ONE'),
            'index.php?option=com_yourextension',
            $vName == 'entryone'
        );
        JHtmlSidebar::addEntry(
            JText::_('COM_YOUREXTENTION_ENTRY_TWO'),
            'index.php?option=com_categories&extension=com_yourextension',
            $vName == 'entrytwo'
        );
    }
0
Alexandr