it-swarm.com.de

Erstellen einer Mehrfachauswahlliste für benutzerdefinierte Feldtypen - Wie werden die Werte gespeichert?

Ich möchte ein Modul erstellen, das die Hersteller von virtuemart analysiert, und der Benutzer wählt aus, welche Hersteller auf der Indexseite angezeigt werden sollen. Es ist das erste Mal, dass ich versuche, einen benutzerdefinierten Feldtyp zu erstellen.

Ich habe meine "benutzerdefinierte Auswahlliste" erstellt. Die Werte aus der Liste werden nicht gespeichert, daher kann ich sie nicht zurückerhalten.

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

var_dump ($ fmanuf); ---> gibt NULL zurück

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;
    }
}

Ich habe nur die getInput-Funktion bearbeitet, sollte ich die getOptions () auch irgendwie bearbeiten?

3
IseNgaRt

XML-Datei

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

So erstellen Sie einen benutzerdefinierten Feldtyp:

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');

Jetzt sind alle Parameter in $imagemanuf Gespeichert.

Analysieren Sie sie im Modul folgendermaßen:

Anmerkung des Editors (mickmackusa): Der folgende Codeausschnitt weist typografische und logische Fehler auf und sollte daher in der aktuellen Form nicht von Forschern verwendet werden. Ich konnte den Code nicht reparieren, ohne gegen faire Editorpraktiken zu verstoßen.

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