[solved] Referenced Items mehrsprachig
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