2012-05-16 13 views
0

我使用Joomla 2.5建立一箇中型網站,我決定通過自動創建菜單來減輕維護和內容管理的難題。如何找出Joomla JTable列/字段名稱?

我查找了擴展名,但是隻找到了Joomla 1.5擴展名。我最終嘗試升級名爲Auto Menu Magic的GPL擴展。

很容易處理基本問題,如擴展文件中的XML標籤,因爲Joomla中有一個頁面可以幫助您從Joomla 1.5遷移到1.6。

我提到的擴展名有一個名爲onContentAfterSave的函數,它在保存文章時由joomla調用。我一直在通過在管理界面中創建垃圾文章進行調試,並將代碼更改爲在幾個地方拋出異常,我可以在管理前端看到這些錯誤消息。

這是我卡住了:

$db = &JFactory::getDBO(); 
    $menu = JTable::getInstance('menu'); 

    $menu->menutype   = $menutype; 
    $menu->name    = $name; 
    $menu->link    = $link; 
    $menu->type    = $linktype; 
    $menu->published   = $published; 
    $menu->componentid  = $componentid; 
    $menu->parent    = $menuparentid; 
    $menu->sublevel   = $menusublevel; 
    $menu->checked_out  = 0; 
    $menu->checked_out_time = 0; 
    $menu->pollid    = 0; 
    $menu->browserNav   = 0; 
    $menu->access    = 0; 
    $menu->utaccess   = 0; 
    $menu->lft    = 0; 
    $menu->rgt    = 0; 
    $menu->home    = 0; 

    $menu->params = $params; 

    // Figure out the order (Just pop this article at the end of the list): 
    $menu->ordering = $menu->getNextOrder(
     "menutype = ".$db->Quote($menu->menutype). 
     " AND published >= 0 AND parent = ".(int) $menu->parent 
    ); 


    // Validate: 
    if (!$menu->check()) 
     return NULL; 

    // DEBUG 2 -- Integrity check 
    throw new Exception ("menutype: $menutype, name: $name, link: $link published: $published, componentid: $componentid menuparentid: $menuparentid menusublevel: $menusublevel"); 

    // Save: 
    if (!$menu->store()) 
     return NULL; 

    // DEBUG 1 
    throw new Exception(" Could save! "); 

正如你可以在上面看到,我試圖把當菜單被保存到數據庫異常(DEBUG 1)。這個例外從來沒有達到,但是達到了上面的例外(DEBUG 2)。這意味着$ menu-> check()返回true,但不是$ menu-> store()。我假設數據庫正在返回一個錯誤,因爲一些Joomla數據庫結構可能在1.5之後發生了變化。

我已經讀了很多這些過去幾小時的來源,但我找不到一件事。我如何查看Joomla表所使用的列,以便我可以正確調試此錯誤?

在此先感謝!

PS:我也看過SQL數據庫,但它沒有多大幫助。這些變量似乎與列名稱有不同的命名約定。

回答

1

我建議打開系統配置中的Joomla調試。在每個頁面的底部,它顯示了它所執行的所有查詢,而這(取決於插件)可能會顯示正在執行的SQL,並且可能是失敗的。有可能是一個大名單,所以你可能需要搜索一下,以找到你感興趣的聲明。

+0

太棒了!堆棧跟蹤和錯誤細節,最後! –

0

你忘了Exceptions Club的第一條規則,如果你扔東西的話..你必須抓住它。

我沒有看到一個try/catch對你的代碼,使PHP將與被停止「致命錯誤......」爲未捕獲的異常所以它會永遠到不了DEBUG 1。例如

Fatal error: Uncaught exception 'Exception' with message ...

嘗試包裝你的代碼在try/catch對,並允許繼續執行後DEBUG 2看看the PHP doc's for exceptions

+0

也許問題不清楚。拋出這些異常的目的正是爲了使錯誤出現在事物的前端,這就是我一直在調試這個過程的方式。在DEBUG 1之後添加了DEBUG 2,因爲DEBUG 1從未到達過。 –

+0

我知道我正在使用一種糟糕的調試方法。但我不太瞭解PHP和Joomla內部。 –

2

我想應該是這樣的,因爲我一直在試圖轉換自動菜單以及! $ db = & JFactory :: getDBO(); $ menu = JTable :: getInstance('menu');

  $menu->menutype    = $menutype; 
      $menu->title    = $title; 
      $menu->alias    = strtolower($title) ; 
      $menu->note     = "Created by automenu"; 
      $menu->path     = $link; 
      $menu->link     = $link; 
      $menu->type     = $linktype; 
      $menu->published   = $published; 
      $menu->parent_id   = $menuparentid 
      $menu->level    = $menusublevel; 
      $menu->componentid   = $componentid; 
      $menu->ordering    = 0; 
      $menu->checked_out   = 0; 
      $menu->checked_out_time  = 0; 
      $menu->browserNav   = 0; 
      $menu->access    = 1; 
      $menu->img     = ''; 
      $menu->templat_style_id  = 0; 
      $menu->params    = $params; 
      $menu->lft     = 0; 
      $menu->rgt     = 0; 
      $menu->home     = 0; 
      $menu->language    = '*'; 
      $menu->client_id   = 0; 

我會被分開來知道你是否得到它的工作!

+0

哈哈。看來我沒有發佈該代碼。 https://github.com/fabiosantoscode/joomla-auto-menus我確實得到它的工作,但它是非常錯誤的。我對Joomla或PHP不太瞭解。我會星期一清理我的工作電腦,並告訴你我是否找到它。 –

+0

當我停止設置$ menu-> lft,rgt,level,parent_id和命令時,它工作。顯然這些不再是菜單項的一部分。 –

+0

我的新版本現在在這裏:https://github.com/fabiosantoscode/joomla-auto-menus –

1

法比奧,

非常感謝!我會試試看看我能否進一步改進。

Mike

+0

歡迎您。 –