it-swarm.com.de

Joomla benutzerdefinierte Felder in der Kategorieliste

Mit Joomla 3.7.x haben benutzerdefinierte Felder endlich einen Teil des Joomla-Inhalts erhalten.

Ich möchte jedoch fragen, wie ich diese benutzerdefinierten Felder in der Joomla-Kategorieliste rendern kann.

Das Hinzufügen von benutzerdefinierten Feldern zur Joomla-Kategorieliste ist immer noch nicht Teil von Joomla (hoffentlich wird es auch eines Tages kommen).

Um die benutzerdefinierten Felder zur Joomla-Kategorieliste hinzuzufügen, habe ich eine Vorlagenüberschreibung von ' com_content/category/default_articles.php ' vorgenommen Fügen Sie zwei Spalten hinzu, die zum Anzeigen von zwei benutzerdefinierten Feldern verwendet werden sollen:

  • Datumsfeld mit Titel: 'Inkrafttreten' und Name 'gildiskoma'
  • Textfeld mit Titel 'Typ' und Name 'Schlacke'

Meine aktuelle Überschreibung von default_articles.php sieht folgendermaßen aus:

<?php /**--- Enable direct access by name to custom fields (Top) ----*/  ?>
<?php foreach($item->jcfields as $jcfield)
     {
    $item->jcFields[$jcfield->name] = $jcfield;
     }
?>

<?php /**--------- Custom Fields Header (Around line 120) -----------*/  ?>
<?php if ($this->params->get('list_show_votes')) : ?>
    <th id="categorylist_header_dato">
        <?php echo JHtml::_('grid.sort', 'LIST_GILDISKOMA', 'gildiskoma', $listDirn, $listOrder); ?>
    </th>
<?php endif; ?>
<?php if ($this->params->get('list_show_votes')) : ?>
    <th id="categorylist_header_type">
        <?php echo JHtml::_('grid.sort', 'LIST_SLAG', 'slag', $listDirn, $listOrder); ?>
    </th>
<?php endif; ?>

<?php /**--- Custom Category List Fields Content (Around line 250) ---*/  ?>
<?php if ($this->params->get('list_show_votes', 0) && $this->vote) : ?>
    <td headers="categorylist_header_date" class="list-gildiskoma">
        <?php echo $item->jcFields['gildiskoma']->value; ?>
    </td>
<?php endif; ?>
<?php if ($this->params->get('list_show_votes', 0) && $this->vote) : ?>
    <td headers="categorylist_header_type" class="list-slag">
        <?php echo $item->jcFields['slag']->value; ?>
    </td>
<?php endif; ?>

Wir verwenden die Funktion zur Artikelabstimmung nicht. Daher habe ich mich dafür entschieden, anstelle der benutzerdefinierten Felder die benutzerdefinierten Felder zu verwenden, wie Sie möglicherweise aus dem obigen Code ersehen, der mir zwei benutzerdefinierte Spalten gibt.

Ich habe mir die Dokumentation für J3.x: Hinzufügen von benutzerdefinierten Feldern/Überschreibungen angesehen und diesen Beitrag auch auf Wie kann ich benutzerdefinierte Joomla-Artikelfelder in einer anderen Komponente abrufen? gefunden

Die Dokumentation enthält einen Abschnitt, in dem erläutert wird, wie Sie einzelne Felder mit Override hinzufügen. In meinem obigen Code wird der Wert für benutzerdefinierte Felder jedoch nicht angezeigt.

Ich bin mir also nicht sicher, was mir fehlt, damit der Wert der Felder in der Liste angezeigt wird.

Unten auch ein Screenshot, der zeigt, was ich versuche zu tun. Screenshot

5
Marius

Es ist sehr einfach, die benutzerdefinierten Felder in Artikellistenansicht zu verwenden. Es funktioniert sofort. Sie müssen JLoader usw. nicht verwenden und Sie müssen kein weiteres "foreach" -argument definieren.

Schau mal, wie das "foreach" in der default-articles.php für jede Zeile in der Tabelle heißt:

<?php foreach ($this->items as $i => $article) : ?>

Sie müssen also nur $ this-> item in $ article ändern

Schauen Sie sich zum Beispiel an, wie die Treffer erstellt werden:

<?php echo JText::sprintf('JGLOBAL_HITS_COUNT', $article->hits); ?>

Sie sehen also, dass es das gibt

$ article-> hits

anstatt

$ this-> item-> hits

Um nun benutzerdefinierte Felder einzufügen, ändern Sie einfach den Standardcode für benutzerdefinierte Felder

<?php echo $this->item->jcfields[id]->value; ?>

zu

<?php echo $article->jcfields[id]->value; ?>

So können Sie für jede Tabellenzeile jedes benutzerdefinierte Feld mit jeder gewünschten ID in Spalten anzeigen.

In deinem Beispiel:

<?php /**--------- Custom Fields Header (Around line 120) -----------*/  ?>
<?php if ($this->params->get('list_show_votes')) : ?>
    <th id="categorylist_header_dato">
        <?php echo JHtml::_('grid.sort', 'LIST_GILDISKOMA', 'gildiskoma', $listDirn, $listOrder); ?>
    </th>
<?php endif; ?>
<?php if ($this->params->get('list_show_votes')) : ?>
    <th id="categorylist_header_type">
        <?php echo JHtml::_('grid.sort', 'LIST_SLAG', 'slag', $listDirn, $listOrder); ?>
    </th>
<?php endif; ?>

<?php /**--- Custom Category List Fields Content (Around line 250) ---*/  ?>
<?php if ($this->params->get('list_show_votes', 0) && $this->vote) : ?>
    <td headers="categorylist_header_date" class="list-gildiskoma">
        <?php echo $article->jcfields['gildiskoma']->value; ?>
    </td>
<?php endif; ?>
<?php if ($this->params->get('list_show_votes', 0) && $this->vote) : ?>
    <td headers="categorylist_header_type" class="list-slag">
        <?php echo $article->jcfields['slag']->value; ?>
    </td>
<?php endif; ?>
2
Peter Schoene

Meine Lösungen zum Abrufen von 2 neuen Spalten in meiner Vorlage com_content/category/default_articles.php überschreiben. Diese docs.joomla und die obigen Antworten haben mir sehr geholfen.

In der <?php foreach ($this->items as $i => $article) : ?>-Schleife. Wo alle Artikelinformationen gesammelt werden:

<!-- this code to grab the fields by use of the fieldshelper -->

<?php JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php'); ?>
<?php foreach($article->jcfields as $jcfield)
   {
    $article->jcFields[$jcfield->name] = $jcfield;
    }
?>

Platzieren Sie die zusätzlichen Spaltenüberschrifteninformationen in Tabellenüberschriften

<!-- table header -->
<th>
    your field 1:
</th>
<th>
    your field 2:
</th>

Und schließlich platzieren Sie die benutzerdefinierten Feldinformationen pro Element im Körper. So was:

<td><?php echo $article->jcFields['your-field-1']->value; ?></td>

<td><?php echo $article->jcFields['your-field-2']->value; ?></td>
2
JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php');
$customFields = FieldsHelper::getFields('com_content.article', $articleitem, true);
$fields = array();
foreach ($customFields as $field)
{
    $fields[$field->name] = $field->value ? $field->rawvalue : $field->default_value;
}

Yay!

2
Michael