Hallo,
ich möchte prüfen, ob ein Artikel ein bestimmtes Attribut hat, um dann ein CMS-Snippet anzuzeigen. Leider funktioniert das nur, wenn dem Attribut auch ein Value zugeordnet ist. Das ist natürlich dann etwas aufwändig jedem benötigten Artikel das Attribut und einen Wert einzutragen. Gibt es da noch einen Trick?
muss es ein Attribut sein? Eine Kategorie wäre viel einfacher
Stimmt, gute Idee! Eigentlich müsste ich damit hinkommen, wenn die Kategorie nicht in Menüs auftaucht. Werde ich gleich testen. Danke
Oder so:
Ändere oxattributelist.php
public function loadAttributes( $sArtId )
{
if ( $sArtId ) {
$sAttrViewName = getViewName( 'oxattribute' );
$sViewName = getViewName( 'oxobject2attribute' );
$sSelect = "select {$sAttrViewName}.*, o2a.* from {$sViewName} as o2a ";
$sSelect .= "left join {$sAttrViewName} on {$sAttrViewName}.oxid = o2a.oxattrid ";
$sSelect .= "where o2a.oxobjectid = '{$sArtId}' and o2a.oxvalue != '' ";
$sSelect .= "order by o2a.oxpos, {$sAttrViewName}.oxpos";
$this->selectString( $sSelect );
}
}
in:
public function loadAttributes( $sArtId )
{
if ( $sArtId ) {
$sAttrViewName = getViewName( 'oxattribute' );
$sViewName = getViewName( 'oxobject2attribute' );
$sSelect = "select {$sAttrViewName}.*, o2a.* from {$sViewName} as o2a ";
$sSelect .= "left join {$sAttrViewName} on {$sAttrViewName}.oxid = o2a.oxattrid ";
$sSelect .= "where o2a.oxobjectid = '{$sArtId}' ";
$sSelect .= "order by o2a.oxpos, {$sAttrViewName}.oxpos";
$this->selectString( $sSelect );
}
}
Ausblenden kannst dann trotzdem über die Valueabfrage
So, nach einiger Zeit versuche ich das nun zu Ende zu bringen. Ich habe mich erstmal für die Lösung mit den versteckten Kategorien entschieden. Dabei habe ich kleine Probleme.
In details kann ich ja nicht einfach alle Kategorien ausgeben, in denen der Artikel enthalten ist. Details.getCategory() gibt ja nur die Root-Kategorie des Artikels wieder.
Da habe ich mir aus einem anderen Thread ein kleines Modul gebaut, um zu prüfen ob der Artikel in der Kategorie ist.
Das ist mein kleines Modul:
class checkcategory extends checkcategory_parent
{
public function isInCategory($sCatId)
{
$bFound = false;
if (in_array($sCatId, $this->getProduct()->getCategoryIds())) $bFound = true;
return $bFound;
}
}
Die Abfrage scheint zu funktionieren. Allerdings deaktiviert sich das Modul selbst. Was können denn Gründe sein, dass sich ein Modul selbst deaktiviert?
Ist mein Ansatz soweit korrekt?