web-dev-qa-db-ja.com

プログラムでコンポーネントにメニュー項目を追加する

ユーザーが記事を作成した後(または記事のリストから選択した後)に既存のメニューにメニュー項目を追加できるコンポーネントを作成しようとしています。私がソートの例に出くわすことができた最も近いものは、以下にリンクされた答えでしたが、それは2.xのためであり、進むべき道に見えます。しかし、私が気付いたのは、#__ assetsテーブルにデータが追加されたことを示すものがないことです。

ここに何か不足しているのですが、バックエンドから追加したときにメニュー項目が作成されると、アセットテーブルにレコードも挿入されます。新しいメニュー項目を挿入したい場合、関連データを#_assetsテーブルに個別に挿入する必要がありますか?

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

6
sifu

まず、メニュー項目はアセットテーブルに配置されないため、この質問は存在しない問題についてです。質問で提供されているリンクは、joom 2.5および3.xの正しい答えを示しています。ただし、参考のために、モデルのprepareTableの例を示します。

$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

実際の解決策ではなく、アイデア:

私は最近、カテゴリと記事の構造に基づいてメニューを作成するプラグイン Kazaam! について学びました。

ウェブサイトに記載されているように、All code is open source, and you are completely free to make changes.。ソースコードを見ると、それがどのように機能するかを確認でき、コードの一部を独自のプロジェクトに使用できるはずです。

3
johanpw

私のために働いた最も簡単で最も読みやすいコードはここにあります=> https://webkul.com/blog/menu-item-joomla-rebuild-automatically/

0
Pratyush