0

私は Joomla 2.5 を使用して中規模の Web サイトを構築しています。メニューを自動的に作成することで、メンテナンスとコンテンツ管理の頭痛の種を軽減することにしました。

これを行う拡張機能を探しましたが、Joomla 1.5 拡張機能しか見つかりませんでした。結局、Auto Menu Magic という GPL 拡張機能をアップグレードしようとしました。

Joomla には、Joomla 1.5 から 1.6 への移行を支援するページがあるため、拡張ファイルの XML タグなどの基本的な問題に対処するのは簡単でした。

私が言及した拡張機能には、記事が保存されたときに joomla によって呼び出される onContentAfterSave という名前の関数があります。私は、管理インターフェイスでゴミ記事を作成し、いくつかの場所で例外をスローするようにコードを変更してデバッグを行ってきました。これは、管理フロントエンドでエラー メッセージとして表示されます。

これは私が立ち往生した場所です:

    $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 以降に変更された可能性があるため、データベースがエラーを返していると思います。

この数時間、ソースを何度も読みましたが、1 つも見つかりません。このエラーを適切にデバッグできるように、Joomla テーブルが使用する列を確認するにはどうすればよいですか?

前もって感謝します!

PS: SQL データベースも調べましたが、あまり役に立ちません。変数には、列名とは異なる命名規則があるようです。

4

4 に答える 4

1

システム構成でJoomlaデバッグをオンにすることをお勧めします。各ページの下部には、実行されたすべてのクエリが表示されます。これは(プラグインによっては)実行されているSQLを示し、おそらく失敗している可能性があります。大きなリストがある可能性が高いので、興味のあるステートメントを見つけるために少し検索する必要があるかもしれません。

于 2012-05-16T18:15:34.207 に答える
1

ファビオ

どうもありがとう!試してみて、さらに改善できるかどうかを確認します。

マイク

于 2013-04-08T14:08:13.663 に答える
0

Exceptions Club の最初のルールを忘れています。何かを投げたら、キャッチしなければなりません。

コードにペアが表示されないため、キャッチされていない例外try/catchに対してPHPが「致命的なエラー...」で停止し、. 例えばDEBUG 1

致命的なエラー:キャッチされない例外 'Exception' とメッセージ ...

コードをtry/catchペアでラップし、PHP ドキュメントの for をDEBUG 2確認した後、実行を続行できるようにしてください。exceptions

于 2012-05-16T22:45:06.093 に答える