属性はProduct_Listおよび層状ナビゲーションにロードされません
-
16-10-2019 - |
質問
私には開発システムがあります。ここに期待どおりに機能するすべてがあります。そして、私はステージングシステムを持っています、ここでは属性はロードされていません。 Store/Attribute_set/...に属性が存在しないことはわからないように感じます。
属性があります artist_id
そして、この属性はロードされていません。
コレクションは、属性で初期化されます。
if (!is_null($this->_productCollection)) {
return $this->_productCollection;
}
$collection = parent::_getProductCollection();
$collection->addAttributeToSelect('artist_id');
属性がコレクションにある場合、次のようにチェックしました。
[_selectAttributes:protected] => Array
(
[name] => 71
[short_description] => 73
[price] => 75
[special_price] => 76
[special_from_date] => 77
[special_to_date] => 78
[small_image] => 86
[thumbnail] => 87
[news_from_date] => 93
[news_to_date] => 94
[status] => 96
[url_key] => 97
[required_options] => 110
[image_label] => 112
[small_image_label] => 113
[thumbnail_label] => 114
[msrp_enabled] => 118
[msrp_display_actual_price_type] => 119
[msrp] => 120
[tax_class_id] => 122
[price_type] => 124
[weight_type] => 126
[price_view] => 127
[shipment_type] => 128
[links_purchased_separately] => 129
[links_exist] => 132
[artist_id] => 146
)
しかし、私が得ようとするとき $_product->getArtistId()
IDはありません。
このシステムでのデバッグは本当に難しいです。クエリが構築されているが、まだ見つからなかった部分を見つけようとしました。
アップデート: :フラットテーブルはオフです。
そして今、悪い部分:少し
<?php $_product->load($_product->getId()); ?>
の中に foreach
の product/list.phtml
問題を修正します;-)
正直に言うと、テーブルで直接設定を変更しながら、データベースで何かを壊したと思います。
属性とストアの間に接続はありますか?
この問題に関するアイデアはありますか?
解決 4
私はこれがどのように起こったのか分からないことを絶対に持っています、ここに物語の終わりがあります:
backend_type
だった varchar
それ以外の int
.
コレクションがロードできないことは私には明らかです artist_id
Magentoが価値をどこで探すべきかわからないが、なぜ $_product->load()
価値を得ることができますか?私はこれを調査しなければなりません。
他のヒント
属性の設定を見て、「フロントエンドの製品ビューページに表示される」が「はい」であり、「レイヤードナビゲーションでの使用」がイエスであることを確認してください(属性がドロップダウンしている場合のみ)
アップデート:
あなたが試すことができるもう一つのことは追加することです:
<product>
<collection>
<attributes>
<artist_id/>
</attributes>
</collection>
</product>
モジュールのconfig.xmlで、u003Cfrontend>セクション。
DEVで動作しますが、ステージングではなく、コードベースが正確なコピーである場合、問題はDB自体です。
ステージングDBを開発DBのステージングに置き換えることで、非常に簡単に確認でき、それがまだ発生しているかどうかを確認できます。
説明していることは、DBで手動編集を行っていない限り、発生するべきではありません。または、2つのサイトでコードが異なります。
EAVテーブルにその属性のデフォルト値はありますか?このクエリを見てください:
SELECT
`t_d`.`entity_id`,
`t_d`.`attribute_id`,
`t_d`.`value` AS `default_value`,
`t_s`.`value` AS `store_value`,
IF(t_s.value_id IS NULL, t_d.value, t_s.value) AS `value`
FROM `catalog_product_entity_varchar` AS `t_d`
LEFT JOIN `catalog_product_entity_varchar` AS `t_s`
ON t_s.attribute_id = t_d.attribute_id AND t_s.entity_id = t_d.entity_id AND t_s.store_id = 3
...
これが、MagentoがすべてのEAV属性をコレクションにロードする方法です。ご覧のとおり、デフォルトのストアに値が設定されていない場合(データベースにエントリがないため、nullは問題ありません)、クエリの最初の部分は結果を返さず、左の結合は機能せず、属性が勝ちます。 Tがロードされます - 店舗固有の値がある場合でも。
残念ながら、私はすでにこれに遭遇しましたが、私たちはインポートに何か問題があり、最終的に何が起こったかに気付くまで、かなり多くのデバッグをしなければなりませんでした。多分あなたのDBをチェックしてください。
多分試してみてください:
$product->getData('artist_id');
属性( 'Artist_id')がに追加されるかどうかを確認します 属性セット 特定の製品が属します。