web-dev-qa-db-fra.com

Ajouter le résultat de la base de données comme option de sélection

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.

2
David Addoteye

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 .

1
mickmackusa