it-swarm.it

Creazione di un elenco di selezioni multiple di tipo di campo personalizzato: come salvare i valori?

Voglio creare un modulo che analizza i produttori da virtuemart e l'utente selezionerà quali produttori desidera mostrare nella pagina dell'indice. È la prima volta che provo a creare un tipo di campo personalizzato.

Ho creato il mio "elenco di selezione personalizzato", i valori dall'elenco non vengono salvati da qualche parte, quindi non posso recuperarli.

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

var_dump ($ fmanuf); ---> restituisce 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;
    }
}

Ho modificato solo la funzione getInput, dovrei in qualche modo modificare anche getOptions () ??

3
IseNgaRt

file 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>

Ora per creare un tipo di campo personalizzato:

mod_manufacturers/campi/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');

Ora tutti i parametri sono memorizzati in $imagemanuf.

Nel modulo, analizzali in questo modo:

Nota dell'editor (mickmackusa), il seguente frammento di codice presenta errori tipografici e logici e pertanto non dovrebbe essere utilizzato dai ricercatori nella sua forma attuale. Non sono stato in grado di riparare il codice senza violare le corrette pratiche dell'editor.

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