簡體   English   中英

Joomla 2.5:如何向全球數據庫對象添加自定義查詢?

[英]Joomla 2.5: how to add a custom query to global db object?

我正在將網站從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();

這是include / 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的查詢中。 我如何確保它進入?

您可以像Joomfish一樣劫持數據庫對象,在系統插件中大致如此

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

然后,所有查詢都將遍歷您的對象,並且您可以將任何您不想更改的內容傳遞給普通數據庫層。

看看Joomfish中的jfrouter插件,以獲得更多的想法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM