web-dev-qa-db-fra.com

Didacticiel de documentation: Pourquoi mon JFormFieldList affiche-t-il une zone de texte?

Je parcourais cette partie du tutoriel:
https://docs.joomla.org/J3.x:Developing_an_MVC_Component/Using_the_database
Sauf que j'ai essayé d'utiliser mes propres noms au lieu de "helloworld".


Dans les options du menu, où il est supposé être une liste, elle affiche simplement une zone de texte vide.

enter image description here


Les codes que j'ai utilisés sont:

site/views/uploadwizard/tmpl/default.xml:

<metadata>
    <layout title="COM_OMITTED_UPLOADWIZARD_VIEW_DEFAULT_TITLE">
        <message>COM_OMITTED_UPLOADWIZARD_VIEW_DEFAULT_DESC</message>
    </layout>

    <fields
        name="request"
        addfieldpath="/administrator/components/com_omitted/models/fields"
        >
        <fieldset name="request">
            <field
                name="id"
                type="ulwiz_wmode"
                label="COM_OMITTED_UPLOADWIZARD_FIELD_WMODE_LABEL"
                description="COM_OMITTED_UPLOADWIZARD_FIELD_WMODE_DESC"
                />
        </fieldset>
    </fields>
</metadata>

admin/models/fields/ulwiz_wmode.php:

<?php
defined('_JEXEC') or die('Restricted access');

JFormHelper::loadFieldClass('list');

class JFormFieldUlWiz_WMode extends JFormFieldList
{
    protected function getOptions()
    {
        $db    = JFactory::getDBO();
        $query = $db->getQuery(true);
        $query->select('id,wmode');
        $query->from('#__omitted_ulwiz_wmode');
        $db->setQuery((string) $query);
        $messages = $db->loadObjectList();
        $options  = array();

        if ($messages)
        {
            foreach ($messages as $message)
            {
                $options[] = JHtml::_('select.option', $message->id, $message->wmode);
            }
        }

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

        return $options;
    }
}

Et la description de la base de données:

DROP TABLE IF EXISTS `#__omitted_ulwiz_wmode`;

CREATE TABLE `#__omitted_ulwiz_wmode` (
    `id`        INT(11)     NOT NULL AUTO_INCREMENT,
    `wmode`     VARCHAR(25) NOT NULL,
    `published` tinyint(4)  NOT NULL DEFAULT '1',
    PRIMARY KEY (`id`)
)

    ENGINE =MyISAM
    AUTO_INCREMENT =0
    DEFAULT CHARSET =utf8;

INSERT INTO `#__omitted_ulwiz_wmode` (`wmode`) VALUES
('Option1Text'),
('Option2Text');

Comment puis-je réparer ça? J'y travaille depuis des heures et je ne peux donc pas passer à la partie suivante du didacticiel.

2
RiA

Le problème est qu'il n'est pas en mesure d'obtenir le terrain. Je vois le nom de fichier que vous avez défini comme ulwiz_wmode.php et dans le nom de la classe que vous utilisez ce JFormFieldUlWiz_WMode. Assurez-vous que la convention de dénomination est très appropriée et doit être identique à nom de classe et nom de fichier. CA devrait etre JFormFieldUlwiz_wmode.

<?php
defined('_JEXEC') or die('Restricted access');

JFormHelper::loadFieldClass('list');

class JFormFieldUlwiz_wmode extends JFormFieldList
{
   protected $type = 'ulwiz_wmode'; //also add this line

   protected function getOptions()
    {
        //your code
    }
}

Vous créez votre propre champ personnalisé. Pour plus de détails sur les champs personnalisés, consultez cette documentation:

https://docs.joomla.org/Creating_a_custom_form_field_type

3
Liz.