MetaModels Beispiel: Referenced items: Unterschied zwischen den Versionen

Aus Contao Community Documentation

(Lösungsansatz)
K (Hinweis für Umstellung auf Namespace für Factory Aufruf.)
Zeile 12: Zeile 12:
  
 
Das MetaModels-Template könnte wie folgt aussehen:
 
Das MetaModels-Template könnte wie folgt aussehen:
 +
 +
{{Hinweis|Beachte das in der TNG Version MetaModels auch auf Namespace umgestellt wurde und die Factory Aufrufe entsprechend anders lauten müssen: \MetaModels\Factory}}
  
 
<source lang="php">
 
<source lang="php">

Version vom 15. Juli 2014, 12:29 Uhr

MetaModels miteinander verknüpfen

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. Von dort möchte man auch per Link auf die Detailansicht des spezifischen Projektes springen können.

Lösungsansatz

Nebst den spezifischen Kunden-Detailinformationen sollen die Projekte gelistet darunter erscheinen. Die Projekte werden jeweils mit einem Titel-Link (h3), einer Kurzbeschreibung und der dazu gehörigen Bildgalerie angezeigt. Die Projekte werden überdies über einen Filter sortiert:

$objFilter = $objMetaModel->prepareFilter(10, array());

In diesem Fall ist '10' die ID des Filters im MetaModels 'mm_projects'. Der Filter sorgt dafür, dass die Projekte chronologisch aufgelistet werden.

Das MetaModels-Template könnte wie folgt aussehen:


Hinweis.png Hinweis: Beachte das in der TNG Version MetaModels auch auf Namespace umgestellt wurde und die Factory Aufrufe entsprechend anders lauten müssen: \MetaModels\Factory


<?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>
Ansichten
Meine Werkzeuge

Contao Community Documentation

<user> Kann es sein, dass sich SyncCto bei Sync->Client anders verhält als umgegekehrt also Sync->Server ?
<xtra> ja, da laufen die Daten in die andere Richtung *scnr*

Navigation
Verstehen
Verwenden
Entwickeln
Verschiedenes
Werkzeuge