MetaModels Beispiel: Referenced items: Unterschied zwischen den Versionen
Aus Contao Community Documentation
Luis (Diskussion | Beiträge) |
Luis (Diskussion | Beiträge) |
||
Zeile 2: | Zeile 2: | ||
=Zwei MetaModels zu einander referenzieren= | =Zwei MetaModels zu einander referenzieren= | ||
==Ausgangslage== | ==Ausgangslage== | ||
− | Es gibt ein MetaModel mit "Kunden" und eines mit "Projekte". | + | Es gibt ein MetaModel mit "Kunden" (mm_customers) und eines mit "Projekte" (mm_projects). mm_projects enthält ein Attribut "customer" vom Typ "select", welches die in mm_customer erfassten Kunden anzeigt. Über dieses Feld wird das Projekt mit dem Kunden verknüpft. |
==Aufgabenstellung== | ==Aufgabenstellung== | ||
Man möchte, dass auf der Detailansicht des Kunden, auch die jeweils dazu gehörigen Projekte angezeigt werden. | Man möchte, dass auf der Detailansicht des Kunden, auch die jeweils dazu gehörigen Projekte angezeigt werden. | ||
==Lösungsansatz== | ==Lösungsansatz== | ||
− | Man möchte, dass auf der Detailansicht des Kunden, auch die jeweils dazu gehörigen Projekte angezeigt werden. | + | Man möchte, dass auf der Detailansicht des Kunden, auch die jeweils dazu gehörigen Projekte angezeigt werden. Die Projekte werden jeweils mit einem Titel-Link (h3), einer Kurzbeschreibung und der dazu gehörigen Bildgalerie gezeigt. |
+ | |||
+ | Das MetaModels-Template könnte wie folgt aussehen: | ||
+ | |||
+ | <source lang="php"> | ||
+ | <?php | ||
+ | function getProjectsByCustomer($strAlias, $format='html5') | ||
+ | { | ||
+ | $objMetaModel = MetaModelFactory::byTableName('mm_projects'); | ||
+ | $objFilter = $objMetaModel->prepareFilter(10, array()); | ||
+ | $objFilter->addFilterRule(new MetaModelFilterRuleSearchAttribute($objMetaModel->getAttribute('customer'), $strAlias, $objMetaModel->getAvailableLanguages())); | ||
+ | $objItems = $objMetaModel->findByFilter($objFilter); | ||
+ | return $objItems->parseAll($format, $objMetaModel->getView(3)); | ||
+ | } | ||
+ | ?> | ||
+ | |||
+ | <div class="customer_detailview"> | ||
+ | <?php foreach ($this->data as $arrItem): ?> | ||
+ | |||
+ | <div class="detailview"> | ||
+ | <h1 class="ce_headline"><?php echo $arrItem['text']['customer']; ?></h1> | ||
+ | <p class="description"><?php echo $arrItem['text']['description']; ?></p> | ||
+ | <p class="year"><?php echo $arrItem['text']['year']; ?></p> | ||
+ | <p class="url"><?php echo $arrItem['html5']['url']; ?></p> | ||
+ | </div> | ||
+ | |||
+ | <div class="referenced_projects"> | ||
+ | <h2>Projekte</h2> | ||
+ | <?php foreach (getProjectsByCustomer($arrItem['raw']['alias']) as $arrProjects): ?> | ||
+ | <?php if(!empty($arrProjects['raw']['images'])): ?> | ||
+ | <div class="project"> | ||
+ | <h3> | ||
+ | <a href="{{env::path}}<?php echo $arrProjects['jumpTo']['url']; ?>"> | ||
+ | <?php echo $arrProjects[$this->getFormat()]['project_name']; ?> | ||
+ | </a> | ||
+ | </h3> | ||
+ | <?php echo $arrProjects[$this->getFormat()]['description']; ?> | ||
+ | <?php echo $arrProjects[$this->getFormat()]['images']; ?> | ||
+ | </div> | ||
+ | <?php endif; ?> | ||
+ | <?php endforeach; ?> | ||
+ | </div> | ||
+ | |||
+ | <?php endforeach; ?> | ||
+ | </div> | ||
+ | |||
+ | </source> |
Version vom 10. September 2013, 08:22 Uhr
Inhaltsverzeichnis
Zwei MetaModels zu einander referenzieren
Ausgangslage
Es gibt ein MetaModel mit "Kunden" (mm_customers) und eines mit "Projekte" (mm_projects). mm_projects enthält ein Attribut "customer" vom Typ "select", welches die in mm_customer erfassten Kunden anzeigt. Über dieses Feld wird das Projekt mit dem Kunden verknüpft.
Aufgabenstellung
Man möchte, dass auf der Detailansicht des Kunden, auch die jeweils dazu gehörigen Projekte angezeigt werden.
Lösungsansatz
Man möchte, dass auf der Detailansicht des Kunden, auch die jeweils dazu gehörigen Projekte angezeigt werden. Die Projekte werden jeweils mit einem Titel-Link (h3), einer Kurzbeschreibung und der dazu gehörigen Bildgalerie gezeigt.
Das MetaModels-Template könnte wie folgt aussehen:
<?php function getProjectsByCustomer($strAlias, $format='html5') { $objMetaModel = MetaModelFactory::byTableName('mm_projects'); $objFilter = $objMetaModel->prepareFilter(10, array()); $objFilter->addFilterRule(new MetaModelFilterRuleSearchAttribute($objMetaModel->getAttribute('customer'), $strAlias, $objMetaModel->getAvailableLanguages())); $objItems = $objMetaModel->findByFilter($objFilter); return $objItems->parseAll($format, $objMetaModel->getView(3)); } ?> <div class="customer_detailview"> <?php foreach ($this->data as $arrItem): ?> <div class="detailview"> <h1 class="ce_headline"><?php echo $arrItem['text']['customer']; ?></h1> <p class="description"><?php echo $arrItem['text']['description']; ?></p> <p class="year"><?php echo $arrItem['text']['year']; ?></p> <p class="url"><?php echo $arrItem['html5']['url']; ?></p> </div> <div class="referenced_projects"> <h2>Projekte</h2> <?php foreach (getProjectsByCustomer($arrItem['raw']['alias']) as $arrProjects): ?> <?php if(!empty($arrProjects['raw']['images'])): ?> <div class="project"> <h3> <a href="{{env::path}}<?php echo $arrProjects['jumpTo']['url']; ?>"> <?php echo $arrProjects[$this->getFormat()]['project_name']; ?> </a> </h3> <?php echo $arrProjects[$this->getFormat()]['description']; ?> <?php echo $arrProjects[$this->getFormat()]['images']; ?> </div> <?php endif; ?> <?php endforeach; ?> </div> <?php endforeach; ?> </div>