MetaModels Beispiel: Referenced items: Unterschied zwischen den Versionen

Aus Contao Community Documentation

(Lösungsansatz)
(Lösungsansatz)
Zeile 6: Zeile 6:
 
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. Die Projekte werden jeweils mit einem Titel-Link (h3), einer Kurzbeschreibung und der dazu gehörigen Bildgalerie gezeigt. Die Projekte werden überdies über einen Filter sortiert:<br>
+
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. Die Projekte werden überdies über einen Filter sortiert:  
$objFilter = $objMetaModel->prepareFilter(10, array()); <br>
+
<source lang="php">$objFilter = $objMetaModel->prepareFilter(10, array()); </source>
 
In diesem Fall ist '10' die ID des Filters im MetaModels 'mm_projects'. Der Filter sorgt dafür, dass die Projekte chronologisch aufgelistet werden.
 
In diesem Fall ist '10' die ID des Filters im MetaModels 'mm_projects'. Der Filter sorgt dafür, dass die Projekte chronologisch aufgelistet werden.
  

Version vom 10. September 2013, 08:27 Uhr

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. 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:

<?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

Chuck Norris programmiert kein PHP, er diktiert das Ergebnis. Den Rest macht der Editor aus Angst.

Stefan Lindecke
Navigation
Verstehen
Verwenden
Entwickeln
Verschiedenes
Werkzeuge