web-dev-qa-db-fra.com

Programmatically ajouter un élément de menu dans le composant

J'essaie de créer un composant dans lequel l'utilisateur peut ajouter un élément de menu à un menu existant après avoir créé l'article (ou sélectionné dans une liste d'articles). La réponse la plus proche que j'ai pu trouver à propos d'un exemple de tri était la réponse ci-dessous, mais c'était pour 2.x et semble être la solution. Mais une chose que j’ai remarquée, c’est que rien n’indique qu’il ait ajouté des données à la table #__assets.

Est-ce qu'il me manque quelque chose ici, mais je me souviens que lorsqu'un élément de menu est créé et que j'en ajoute un à partir du backend, il insère également un enregistrement dans la table des actifs. Donc, si je voulais insérer un nouvel élément de menu, devrais-je insérer les données pertinentes dans la table #_assets séparément?

https://stackoverflow.com/questions/12651075/programically-create-menu-item-in-joomla?lq=1

6
sifu

premièrement, les éléments de menu ne sont pas placés dans la table des actifs. Cette question concerne donc un problème inexistant. Le lien fourni dans la question donne la réponse correcte pour joom 2.5 et 3.x. mais pour référence voici un exemple dans le prepareTable d'un modèle.

$menuTable = JTableNested::getInstance('Menu');

// which menu you want to add to - 
$menutype = 'thisismymenusname';

// this is heading menu item but what data you have and require will vary per case - just look at an appropriate row in yr menu table
$menuData = array(
  'menutype' => $menutype,
  'title' => $table->alias,
  'alias' => $table->alias,
  'path' => $table->alias,
  'type' => 'heading',
  'component_id' => 0,                  
  'language' => '*',
  'published' => 1,
);

// this item is at the root so the parent id needs to be 1
$parent_id = 1;
$menuTable->setLocation($parent_id, 'last-child');

// save is the shortcut method for bind, check and store
if (!$menuTable->save($menuData))
{
  $this->setError($menuTable->getError());
  return false;
}
5
jamesgarrett

Pas vraiment une solution, mais une idée:

J'ai récemment découvert Kazaam! , un plugin qui crée un menu basé sur votre structure de catégorie et d'article.

Comme l'indique le site Web, All code is open source, and you are completely free to make changes.. En regardant le code source, vous devriez être capable de voir comment cela fonctionne et peut-être utiliser des parties du code pour votre propre projet.

3
johanpw

Le code le plus facile et le plus lisible qui a fonctionné pour moi est ici => https://webkul.com/blog/menu-item-joomla-rebuild-automatically/

0
Pratyush