Je crée un addon Joomla 3x SP Pagebuilder3, mais j'ai de la difficulté à obtenir les résultats d'une base de données en tant qu'option dans un type de sélection.
C'est ce que j'ai fait jusqu'à présent.
class MyCustomTypes {
public static function getBannerCats(){
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select(array('id', 'title', 'alias'))
->from('#__categories')
->where('extension = ' . $db->quote('com_banners'))
->where('parent_id > 0')
->where('published > -1');
$db->setQuery($query);
$items = $db->loadObjectList();
$options = array();
if ($items)
{
foreach($items as $item)
{
// THIS IS WHERE MY PROBLEM IS
$options[] = $item->title;
}
}
// $options = array_merge(parent::getOptions(), $options);
return $options;
}
}
Je veux des options à montrer ici
'category_ids'=>array(
'type'=>'select',
'title'=>JText::_('Categories'),
'desc'=>JText::_('Category Source'),
'values'=>array(MyCustomTypes::getBannerCats()),// Result will show here like so 'result_id'=>'result_title'
)
Je serai heureux si quelqu'un peut m'aider. Merci.
Après avoir mis à jour votre question ...
Si votre tableau $options
Doit être associatif, construisez-le ainsi dans la boucle.
$options[$item->id] = $item->title;
Votre élément values
semble trop complexe.
'values'=>array(MyCustomTypes::getBannerCats()) // multi-dim array
cela va stocker votre tableau à une dimension retourné à l'intérieur d'un tableau. Au lieu de cela, je suppose que vous devriez utiliser:
'values' => MyCustomTypes::getBannerCats() // 1-dimensional array
Avant la mise à jour de la question ...
Il semble que votre méthode select()
reçoive 3 paramètres, mais vous avez l'intention de passer une chaîne contenant 3 valeurs ou un tableau avec 3 éléments.
Je recommande ceci:
->select(['id', 'title', 'alias'])
ou
->select('id, title, alias')
ou
->select($db->qn(['id', 'title', 'alias']))
Pour expliquer ce que fait Joomla ... La méthode select()
n'accepte qu'un paramètre/argument, de sorte que seul id
est utilisé et title
et alias
sont simplement ignorés par la méthode. Si vous appelez $query->dump()
, vous verrez quelque chose comme ce qui suit (avec votre préfixe de table à la place de #_
)
SELECT ID
FROM #__catégories
WHERE extension = 'com_banners' AND parent_id> 0 AND published> -1
Ainsi, $item->title;
Ne contiendra jamais de données.
Avant de poster une question lorsque vous pensez ne fonctionne pas , vérifiez les erreurs éventuelles et exportez votre requête pour vous assurer qu'il n'y a pas de fautes de frappe simples.
p.s. si vous n'utilisez que title
, écrivez une seule valeur dans le SELECT et utilisez ne méthode de récupération d'ensemble de résultats plus simple pour traiter une seule colonne de données .