1

さまざまなクライアントが使用する Web サイトを 1.5 から 2.5 にアップグレードしています。正しいメニューとモジュールを確実に表示するには、ページをロードするときにシステム プラグインでカスタム クエリを作成する必要があります。

クエリをグローバル dbo に設定するにはどうすればよいですか? たとえば、クエリが menu.php の標準クエリにも含まれるように、数行追加する必要があります。

これが私のコードです:

$db = JFactory::getDbo();

$query = $db->getQuery();

$query->leftJoin("#__menu_types AS mt ON m.menutype = mt.menutype");
$query->leftJoin("#__wl_clientmap as cm on cm.target_id=mt.id AND cm.target_type='mnu'");
if ($this->clientid>0){
        $query->where("cm.client_id=".intval($this->clientid)."");
}
else {
    $query->where("(cm.client_id=0 OR cm.client_id IS NULL)");
}
$db->setQuery($query);

$menu = & JSite::getMenu();

includes/menu.php の内容は次のとおりです。

public function load()
{
    // Initialise variables.
    $db     = JFactory::getDbo();

    $app    = JApplication::getInstance('site');
    $query  = $db->getQuery(true);

    $query->select('m.id, m.menutype, m.title, m.alias, m.note, m.path AS route, m.link, m.type, m.level, m.language');
    $query->select('m.browserNav, m.access, m.params, m.home, m.img, m.template_style_id, m.component_id, m.parent_id');
    $query->select('e.element as component');
    $query->from('#__menu AS m');
    $query->leftJoin('#__extensions AS e ON m.component_id = e.extension_id');
    $query->where('m.published = 1');
    $query->where('m.parent_id > 0');
    $query->where('m.client_id = 0');
    $query->order('m.lft');

残念ながら、私のカスタム クエリは menu.php のクエリに表示されません。確実に入るようにするにはどうすればよいですか?

4

1 に答える 1

0

Joomfish と同じ方法でデータベース オブジェクトを乗っ取ることができます。大まかに言うと、システム プラグインでは次のように機能します。

$db = & JFactory::getDBO();
$db = new JFDatabase($options);

次に、すべてのクエリがオブジェクトを通過し、変更したくないものを通常のデータベース レイヤーに渡すことができます。

Joomfish の jfrouter プラグインを見て、さらにアイデアを得てください。

于 2013-11-13T20:12:17.537 に答える