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 ??
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();
}