it-swarm.com.de

Joomla 3 helloworld Komponentenkategorie

Nachdem ich dem Joomla-Dokument " Entwickeln einer MVC-Komponente " bis zum Schritt 15 - "Hinzufügen einer ACL" gefolgt bin, funktioniert alles. Dann habe ich versucht, eine neue Ansicht "Kategorie" hinzuzufügen, aber es hat nicht funktioniert.

Hier ist mein Code:

Im Ordner admin fields habe ich eine hellocategory.php erstellt, die mit helloword fast identisch ist. Ändern Sie einfach den Code

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

Das Admin-Menü funktioniert, aber das Frontend kann keine Elemente in diesen Kategoriedaten abrufen. Gibt es eine Möglichkeit, ein Dokument oder ein Beispiel für die Einzelkategorieansicht online zu entwickeln? Ich habe vier Tage lang versucht, mit Google nach Lösungen zu suchen, aber immer noch keine Ahnung, oder ist die einzige Möglichkeit, Daten aus der Datenbank abzurufen? Danke vielmals!

var_dump ($ this) wird ausgegeben

    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

Bearbeiten: Okay, jetzt haben wir das Ende Ihrer getOptions-Methode (), das Problem liegt in der display () -Methode Ihrer Ansicht. $ category ist nur im lokalen Bereich dieser Methode verfügbar. Sie müssen es zu einer Klasseneigenschaft machen.

In display () ändern:

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

zu

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

In default.php:

var_dump($this->category);
1
chrBrd

Ich empfehle Ihnen, den Link zu index.php?option=com_categories&extension=com_YOUREXTENSION Zu verwenden.

Und fügen Sie die Datei /helpers/yourextension.php Hinzu, die das Menü mit der Methode erzeugt

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