Hallo,
ich habe ein MM Products und ein MM Textmodules. Beide enthalten übersetzte Attribute.
In MM Products kann ich über eine Mehrfachauswahl Textbausteine aus MM Textmodules zuordnen.
MM Textmodules hat nur 2 übersetzte Atrribute:
1.) Name des Textbausteines = Überschrift
2.) Text
Ich möchte nun in der Detailansicht von MM Products, die immer nur 1 Produkt enthält, die zugeordneten Textbausteine ausgeben.
MM Textmodules - eigener SQL-Filter (id=4):
Code:
SELECT products.id, relation.item_id, header.item_id, header.value, text.value, sort.sorting
FROM `tl_metamodel_tag_relation` as relation,
`mm_products` as products,
`tl_metamodel_translatedtext` as header,
`tl_metamodel_translatedlongtext` as text,
`mm_textmodules` as sort
WHERE products.id = relation.item_id
AND relation.value_id = header.item_id
AND relation.value_id =text.item_id
AND sort.id = header.item_id
AND header.att_id = 38
AND text.att_id = 39
AND relation.att_id = 40
AND header.langcode= {{param::filter?name=lang}}
AND text.langcode = {{param::filter?name=lang}}
AND products.id = {{param::filter?name=id}}
Template:
PHP-Code:
<?php
function getTextmodulesByProduct($itemId, $format='html5')
{
$objMetaModel = \MetaModels\Factory::byTableName('mm_textmodules');
$objFilter = $objMetaModel->prepareFilter(4, array('id' => $itemId, 'lang' => $GLOBALS['TL_LANGUAGE']));
$objItems = $objMetaModel->findByFilter($objFilter, 'sorting');
echo count($arrItems = $objItems->parseAll());
return $objItems->parseAll($format, $objMetaModel->getView(12));
?>
<?php if (count($this->data)): ?>
<div class="product_detailview">
<?php foreach ($this->data as $arrItem): ?>
<div class="detailview">
<h1 class="ce_headline"><?php echo $arrItem['text']['name'] ?> </h1>
<p class="description"><?php echo $arrItem['text']['description']; ?></p>
<p class="year"><?php echo $arrItem['text']['price']; ?></p>
<p class="url"><?php echo $arrItem['html5']['url']; ?></p>
</div>
<div class="referenced_textmodules">
<?php foreach (getTextmodulesByProduct($arrItem['raw']['id']) as $arrTextmodules): ?>
<div class="textmodule">
<?php echo $arrTextmodules[$this->getFormat()]['blockname']; ?>
<?php echo $arrTextmodules[$this->getFormat()]['textblock']; ?>
</div>
<?php endforeach; ?>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
- Problem:
Ich bekomme bei einem Artikel immer nur einen (den letzten) der beiden ausgewählten Textbausteine ausgegeben. Der selbe SQL-Code direkt (myphpAdmin) angewendet, gibt beide Einträge aus.
Lasse ich
Code:
AND products.id = {{param::filter?name=id}}
weg, erhalte ich beide (alle) vorhanden Einträge.
- Frage:
Gibt es einen eleganteren Weg mit MM Methoden um zum Ergebnis zu kommen?
Danke Roman
Lesezeichen