11

私は Magento 1.13 のコードを数時間いじっていますが、URL の書き換えで何が行われたのか理解できません。これを調べた人が私を正しい方向に向けてくれることを願っていました。

core_url_rewrite が使用されなくなったことに気付きました (または、少なくともデフォルトでは空であり、追加した新しい製品とカテゴリは core_url_rewrite テーブルに反映されていません)。代わりに、それらは新しい enterprise_url_rewrite テーブルに追加されています。

これはかなり簡単でしたが、他にもかなりの数のテーブルが追加されていることに気付きました (つまり、enterprise_url_rewrite_category_cl、enterprise_url_rewrite_product_cl、enterprise_url_rewrite_redirect_cl、enterprise_url_rewrite_redirect_rewrite) 。MySQL Workbench を使用してテーブルをリバース エンジニアリングし、次の EER ダイアグラムを作成しました。

ここに画像の説明を入力

上記の EER ダイアグラムは、enterprise_url_rewrite_redirect と enterprise_url_rewrite の間の接続を示していませんが、enterprise_url_rewrite_redirect_rewrite テーブルで管理されている 2 つの間に関係がある (少なくとも私は想定しています)。私の質問は、他のテーブルが何をするかについてです。それぞれに主キーとしての version_id と、redirect_id または entity_id 外部キーがあります。私が想定している enterprise_url_rewrite_redirect_cl 外部キーは、enterprise_url_rewrite_redirect プライマリ キーに関連しています。

私の最初の質問は、このテーブルの目的は何ですか? それがどのように役立つかわかりません。私はテーブルをプロジェクト全体で検索しましたが、使用されているどころか、作成されている場所さえ見つかりませんでした。この質問に対する答えが明らかである場合は、ご容赦ください。

2 番目の質問は、enterprise_url_rewrite_product_cl および enterprise_url_rewrite_category_cl テーブルに関するものです。これら 2 つのテーブルには両方とも entity_id があるようです。これらの entity_ids が何を参照している可能性があるかについて、誰かが何か知っているかどうか疑問に思っていましたか?

また、モデルにアクセスする一般的な方法が変更されていることにもコードから気付きました。例として、Enterprise/AdminGws/Model/Controllers.php の 781 行目に次のコード変更があります。

から:

$object = Mage::getModel('core/url_rewrite')->load($id);

に:

$object = Mage::getSingleton('core/factory')->getUrlRewriteInstance()->load($id);

さて、Mage_Core_Model_Factory から:

const XML_PATH_URL_REWRITE_MODEL = 'global/url_rewrite/model';
. . .
public function getUrlRewriteInstance()
{
    return $this->getModel($this->getUrlRewriteClassAlias());
}
. . .
    public function getUrlRewriteClassAlias()
{
    return (string)$this->_config->getNode(self::XML_PATH_URL_REWRITE_MODEL);
}

XML パスが global/url_rewrite/model であることがわかります。一致する Config.xml を見ると、次のようになります。

    <url_rewrite>
        <model>core/url_rewrite</model>
    </url_rewrite>

最後に、Mage/Core/Model/Url/Rewrite.php を調べたところ、次の 2 つの関数が見つかりました。

 /**
 * Implement logic of custom rewrites
 . . . 
 * @deprecated since 1.7.0.2. Refactored and moved to Mage_Core_Controller_Request_Rewrite
 */

public function rewrite( . . .) { . . .

/**
 * Prepare and return QUERY_STRING
. . .
 * @deprecated since 1.7.0.2. Refactored and moved to Mage_Core_Controller_Request_Rewrite
 */
protected function_getQueryString() { . . .

コメントは、Mage_Core_Controller_Request_Rewrite クラスが存在する必要があることを暗示しているようですが、Mage/Core/Controller/Request にはそのようなクラスはありません。Magento チームがおそらく Mage_Core_Model_Url_Rewrite_Request を参照していることを確認できました (コメントを変更するのを忘れただけだと思います。デバッガーでこれを実行しようとしましたが、不明な理由でクラッシュし続けます。次のログを取得し続けます。

a:5:{i:0;s:77:"Invalid method Mage_Core_Controller_Varien_Front::_getRequestPath(Array
(
)
)";i:1;s:611:"#0 xdebug://debug-eval(1): Varien_Object->__call('_getRequestPath', Array)
1 xdebug://debug-eval(1): Mage_Core_Controller_Varien_Front->_getRequestPath()
2 C:\user\emil\projects\magento\magento\app\code\core\Mage\Core\Controller\Varien\Front.php(1    67): Mage_Core_Controller_Varien_Front::dispatch()
3 C:\user\emil\projects\magento\magento\app\code\core\Mage\Core\Model\App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
4 C:\user\emil\projects\magento\magento\app\Mage.php(683): Mage_Core_Model_App->run(Array)
5 C:\user\emil\projects\magento\magento\index.php(87): Mage::run('', 'store')
6 {main}";s:3:"url";s:14:"/magento/admin";s:11:"script_name";s:18:"/magento/index.php";s:4:"skin";s:7:"default";}

上記の問題は、デバッグ モードに入ったときにのみ発生します。全体として、コードを調べて新しい書き直しがどのように機能するかを理解しようとしましたが、最終的には手ぶらで行き詰まりました。私はGoogleを検索しましたが、あまり思いつきませんでした。Magento EE の新しいバージョンが URL の書き換えに対してどのように機能するかについて、誰かが調査を行ったことがあるかどうか疑問に思っていました。

ありがとうございました。

エミル

4

1 に答える 1

1

新しいエンタープライズ URL 書き換えモジュールはすでに非常に重要な変更を行っているため、質問に答えるのは難しいです。次のリリース (1.13.0.2) で安定したバージョンが期待されていますが、それまでは、Magento コア チーム以外の誰も、書き換えモジュールがどのように表示され、機能するかを正確に伝えることはできません.

ただし、新しいセットアップの要点は、Magento が から書き換えをプルenterprise_url_rewriteするようになり、特定した他のすべてのテーブルを使用して、再インデックス処理中に再構築することです。

で終わるすべての関連テーブル_clは、データベース トリガーに関連付けられている変更ログです。

于 2013-07-28T18:48:53.583 に答える