MagentoがWishListでモデルリソース宣言でDeprecatedNodeタグを使用した理由
-
16-10-2019 - |
質問
config.xmlでモデル構成で興味深いことを見てきました。私はタグについて不明でした <deprecatedNode>
モデルクラスの宣言では、このタグについて知りたいです。
カスタム拡張機能では、このタイプのモデルクラス宣言が必要です。
<models>
<[module]>
<class>[Namespace]_[Module]_Model</class>
<resourceModel>[module]_mysql4</resourceModel>
</[module]>
<[module]_mysql4>
<class>[Namespace]_[Module]_Model_Mysql4</class>
<entities>
<[module]>
<table>[module]</table>
</[module]>
</entities>
</[module]_mysql4>
</models>
But in magento existing modules
お気に入り Wishlist 's config.xml
DeprecatedNodeとResourceModelを使用してモデルを定義しますこのパターンで宣言します
<wishlist>
<class>Mage_Wishlist_Model</class>
<resourceModel>wishlist_resource</resourceModel>
</wishlist>
<wishlist_resource>
<class>Mage_Wishlist_Model_Resource</class>
<deprecatedNode>wishlist_mysql4</deprecatedNode>
<entities>
<wishlist>
<table>wishlist</table>
</wishlist>
<item>
<table>wishlist_item</table>
</item>
<item>
<table>wishlist_item</table>
</item>
<item_option><table>wishlist_item_option</table></item_option>
</entities>
</wishlist_resource>
Magentoで使用されるこのタイプのコード
<resourceModel>wishlist_resource</resourceModel>
</wishlist>
<wishlist_resource>
<class>Mage_Wishlist_Model_Resource</class>
<deprecatedNode>wishlist_mysql4</deprecatedNode>
解決
1.6より前のバージョンで <resourceModel>
ノードには通常、この名前がありました。 [module]_mysql4
.
バージョン1.6から始まるMagentoは(理論的に)MySQLだけでなく、他のタイプのデータベースをサポートしています。したがって、リソースモデル名はに変更されました wishlist_resource
.
しかし、いくつかのリソースモデルを書き直す可能性のある古い拡張機能を作成するために、これは機能します、これ deprecatedNode
紹介されました。
モデルまたはリソースモデルが使用されていない場合 [module]_resource
タグから、Magentoはを使用してそれを探します deprecatedNode
価値。
これらの方法を見てください:
Mage_Core_Model_Resource::getEntity
public function getEntity($model, $entity)
{
$modelsNode = Mage::getConfig()->getNode()->global->models;
$entityConfig = $modelsNode->$model->entities->{$entity};
/**
* Backwards compatibility for pre-MMDB extensions.
* In MMDB release resource nodes <..._mysql4> were renamed to <..._resource>. So <deprecatedNode> is left
* to keep name of previously used nodes, that still may be used by non-updated extensions.
*/
if (isset($modelsNode->$model->deprecatedNode)) {
$deprecatedNode = $modelsNode->$model->deprecatedNode;
if (isset($modelsNode->$deprecatedNode->entities->$entity)) {
$entityConfig = $modelsNode->$deprecatedNode->entities->$entity;
}
}
return $entityConfig;
}
と Mage_Core_Model_Config::getGroupedClassName
public function getGroupedClassName($groupType, $classId, $groupRootNode=null)
{
....
$className = null;
if (isset($config->rewrite->$class)) {
$className = (string)$config->rewrite->$class;
} else {
/**
* Backwards compatibility for pre-MMDB extensions.
* In MMDB release resource nodes <..._mysql4> were renamed to <..._resource>. So <deprecatedNode> is left
* to keep name of previously used nodes, that still may be used by non-updated extensions.
*/
if ($config->deprecatedNode) {
$deprecatedNode = $config->deprecatedNode;
$configOld = $this->_xml->global->{$groupType.'s'}->$deprecatedNode;
if (isset($configOld->rewrite->$class)) {
$className = (string) $configOld->rewrite->$class;
}
}
}
....
}
所属していません magento.stackexchange