web-dev-qa-db-fra.com

Création d'une liste multisélectionnée de type de champ personnalisé - comment enregistrer les valeurs?

Je veux faire un module qui analyse les fabricants de virtuemart, et l’utilisateur sélectionnera les fabricants à afficher dans la page d’index. C'est la première fois que j'essaie de créer un type de champ personnalisé.

J'ai créé ma "liste de sélection personnalisée" - les valeurs de la liste ne sont pas enregistrées quelque part, je ne peux donc pas les récupérer.

$fmanuf = $params->get('foreignmanuf');

var_dump ($ fmanuf); ---> renvoie NULL

XML:

<fieldset name="brand_params">          
    <field name="foreignmanuf" type="Manulist"  label="Foreign Brands" multiple="true"  description="Foreign Cologne Brands" /> 
</fieldset>

manulist.php:

<?php

defined('JPATH_PLATFORM') or die;

class JFormFieldManulist extends JFormField
{

    protected $type = 'Manulist';

    protected function getInput()
    {
    $db= JFactory::getDbo();
    $query = $db->getQuery(true);
    $query->select('*');
    $query->from('#__virtuemart_manufacturers_en_gb'); 
    $db->setQuery($query);
    $options = $db->loadObjectList();
    $longstring= '<select multiple="multiple">';

    $counter=1;
foreach( $options as $row ) {

        $longstring .= '<option value="' . $counter . '">'. $row->mf_name . ' </option>' ; 
        $counter++; 
    }
    $longstring.= '</select>';
    return $longstring;
}
    protected function getOptions()
    {

        $options = array();

        foreach ($this->element->children() as $option)
        {


            if ($option->getName() != 'option')
            {
                continue;
            }

            $tmp = JHtml::_(
                'select.option', (string) $option['value'],
                JText::alt(trim((string) $option), preg_replace('/[^a-zA-Z0-9_\-]/', '_', $this->fieldname)), 'value', 'text',
                ((string) $option['disabled'] == 'true')
            );


            $tmp->class = (string) $option['class'];

            $tmp->onclick = (string) $option['onclick'];

            $options[] = $tmp;
        }

        reset($options);

        return $options;
    }
}

J'ai seulement édité la fonction getInput, devrais-je en quelque sorte éditer les getOptions () également ??

3
IseNgaRt

fichier XML

<fieldset name="brand_params" addfieldpath="/modules/mod_manufacturers/fields" >    
    <field name="foreignmanuf"
           type="Manulist"
           label="Foreign Brands"
           multiple="true"
           description="Foreign Cologne Brands" />`
</fieldset>

Maintenant, pour créer un type de champ personnalisé:

mod_manufacturers/fields/manulist.php

<?php    
defined('JPATH_PLATFORM') or die;
JFormHelper::loadFieldClass('list');
class JFormFieldManulist extends JFormFieldList
{
    protected $type = 'Manulist';

    protected function getOptions()
    {
        $db= JFactory::getDbo();
        $query = $db->getQuery(true)
                    ->select('*')
                    ->from('#__virtuemart_manufacturers_en_gb'); 
        $db->setQuery($query);
        $items = $db->loadObjectList();

        $options = array();
        if ($items)
        {
            foreach($items as $item)
            {
                $options[] = JHtml::_('select.option', $item->virtuemart_manufacturer_id, $item->mf_name, $item->slug);
            }
        }

        return array_merge(parent::getOptions(), $options);
    }
}

mod_manufacturers.php

$imagemanuf = $params->get('manufimages');

Maintenant, tous les paramètres sont stockés dans $imagemanuf.

Dans le module, analysez-les comme ceci:

Remarque de l'éditeur (mickmackusa), le fragment de code suivant présente des défauts typographiques et logiques et ne doit donc pas être utilisé par les chercheurs dans sa forme actuelle. Je n'ai pas pu réparer le code sans enfreindre les pratiques équitables de l'éditeur.

tmpl/default.php

for ($i=0;$i<$imagecount;$i++) {
  $id=$imagemanuf[$i];
  $db= JFactory::getDbo();
    $ready = $db->getQuery(true);
    $query="SELECT file_url FROM #__virtuemart_medias  WHERE virtuemart_media_id = (
    SELECT virtuemart_media_id from #__virtuemart_manufacturer_medias where virtuemart_manufacturer_id = $id )";
    $db->setQuery($query);
    $options=$db->loadObjectList();
}
3
IseNgaRt