Frage

Ich habe ein Entwicklungssystem, hier funktioniert alles wie erwartet. Und ich habe ein Staging -System, hier ist das Attribut nicht geladen. Es fühlt sich an, dass das Sytem nicht weiß, dass das Attribut nicht im Store/Attribute_set/... vorhanden ist?

Ich habe ein Attribut artist_id und dieses Attribut ist nicht geladen.

Die Sammlungen werden mit dem Attribut initialisiert:

if (!is_null($this->_productCollection)) {
    return $this->_productCollection;
}
$collection = parent::_getProductCollection();
$collection->addAttributeToSelect('artist_id');

Ich habe überprüft, ob sich das Attribut in der Sammlung befindet und es ist:

[_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
    )

Aber wenn ich versuche zu bekommen $_product->getArtistId() Es gibt keine ID.

Das Debuggen an diesem System ist wirklich schwierig. Ich habe versucht, den Teil zu finden, in dem die Abfrage gebaut wurde, aber noch nicht gefunden wurde.

AKTUALISIEREN: Flache Tische sind ausgeschaltet.

Und jetzt der schlechte Teil: ein wenig

<?php $_product->load($_product->getId()); ?>

in dem foreach des product/list.phtml behebt das Problem ;-)

Um ehrlich zu sein: Ich glaube, ich habe etwas in der Datenbank gebrochen, während ich die Einstellungen in den Tabellen geändert habe.

Gibt es eine Verbindung zwischen Attributen und Geschäften?
Irgendwelche Ideen zu diesem Problem?

War es hilfreich?

Lösung 4

Ich habe absolut keine Ahnung, wie dies passiert ist, hier ist das Ende der Geschichte:

Das backend_type war varchar Anstatt von int.

Für mich ist es offensichtlich, dass die Sammlung das nicht laden kann artist_id Wenn Magento nicht weiß, wo er nach dem Wert suchen soll, aber warum ist a $_product->load() in der Lage, den Wert zu erhalten? Ich muss das untersuchen.

Andere Tipps

Schauen Sie sich die Attributeinstellungen an und stellen Sie sicher, dass die "sichtbare auf der Produktansichtsseite auf Front-End" Ja und "Verwendung in der Schichtnavigation" auch ja ist (nur wenn Attribut Dropdown ist)

AKTUALISIEREN:

Eine andere Sache, die Sie ausprobieren können, ist das Hinzufügen:

    <product>
        <collection>
            <attributes>
                <artist_id/>
            </attributes>
        </collection>
    </product>

In config.xml eines Moduls in deru003Cfrontend> Sektion.

Wenn es auf Dev funktioniert, aber nicht in der Inszenierung - und die Codebasis ist eine genaue Kopie -, dann ist Ihr Problem Ihr DB selbst.

Sie können sehr leicht bestätigen, indem Sie Ihren Staging -DB durch die Ihrer Entwicklungs -DB ersetzen und feststellen, ob es noch passiert.

Was Sie beschreiben, sollte einfach nicht passieren, wenn Sie im DB manuelle Bearbeitungen vorgenommen haben - oder der Code ist auf Ihren beiden Websites unterschiedlich.

Gibt es in der EAV -Tabelle einen Standardwert für dieses Attribut? Schauen Sie sich diese Frage an:

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
...

So lädt Magento jedes EAV -Attribut in Sammlungen. Wie Sie sehen, wird der erste Teil der Abfrage kein Ergebnis zurückgegeben, wenn kein Wert für den Standardspeicher festgelegt ist (kein Eintrag in der Datenbank, Null wäre in Ordnung). Der linke Join funktioniert nicht, und Ihr Attribut wurde gewonnen. ' T geladen werden - auch wenn Sie einen fachspezifischen Wert haben.

Leider bin ich schon einmal darauf gestoßen, wir haben mit einem Import etwas falsch gemacht und ich musste ziemlich viel debuggen, bis ich endlich merkte, was passiert ist. Vielleicht überprüfen Sie Ihre DB.

Vielleicht versuchen Sie:

$product->getData('artist_id');

Überprüfen Sie, ob das Attribut ('artist_id') zu dem hinzugefügt wird Attributsatz zu dem das bestimmte Produkt gehört.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top