Backendoverride - so geht's:

Es geht um die Artikelansicht im Backend. Dort werden die Artikel aufgelistet.

Die Liste liefert neben dem Titel, der Sprache, der Id oder dem Autor noch weitere nützliche Parameter. Jedoch wird nicht angezeigt, ob der Artikel von jemanden bearbeitet wurde. Die Artikelansicht im Backend soll angereichert werden. Nun wurde der Wunsch an mich herangetragen, im Backend in der erwähnten Artikelansicht auch anzuzeigen, ob ein Artikel bearbeitet wurde.

Override als Lösung

Das habe ich per Override gelöst - mit dem Haken, dass sich diese Spalte nicht sortieren lässt. Dies würde mir nur mit einem Core Hack gelingen. Darauf will ich jedoch verzichten und das erfüllt auch nicht den Anspruch an ein Override. Eine weiterer "Einschnitt" ist, dass ich in der Overridedatei (s. unten) die modified Daten aus der Datenbank direkt abrufe. Das ist zwar nicht gerade der beste Stil, jedoch erfüllt es seinen Zweck und ich konnte auf diese Art den Anspruch, evtl. BearbeiterInnen anzuzeigen schnell - per Override - lösen.

Und so gehe ich vor:

Relevant ist die default.php aus der view der com_content/articles. Wie ihr die Override dateien anlegt, wird hier gut beschrieben.
Hier füge ich der variable $columns zwei weitere Spalten hinzu und setze diese von 10 auf 12, weil ich zwei neue Spalten hinzufüge.
$columns = 12; statt $columns = 10; 
Dann füge ich eine DB Abfrage hinzu und hole mir aus der content Tabelle das modified Datum, die ID von modified_by sowie den zugehörigen username aus der user Tabelle (hierzu muss die Verbindung per "join" hergestellt werden) und schreibe das Ergebnis in die ObjectList('key') Klasse. Weitere Infos zu DB Abfragen in derJoomla Doku.

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query
->select($db->quoteName(array('m.modified_by', 'm.modified', 'm.id', 'u.name')))
->from($db->quoteName('#__content', 'm'))
->join('LEFT', $db->quoteName('#__users', 'u') . ' ON (' . $db->quoteName('m.modified_by') . ' = ' . $db->quoteName('u.id') . ')');
$db->setQuery($query);
$modifiers = $db->loadObjectList('id');

Nun füge ich dem tablehead die beiden Spalten "Modified by" und "Modified date" und hinzu (diese Spaltenbezeichnungen habe ich der einfachheit halber "hartcodiert"):

<th width="10%" class="nowrap hidden-phone">
<?php echo JHtml::_('searchtools.sort', 'Modified by', 'm.modified_by', $listDirn, $listOrder); ?>
</th>
<th width="10%" class="nowrap hidden-phone">
<?php echo JHtml::_('searchtools.sort', 'Modified date', 'm.modified', $listDirn, $listOrder); ?>
</th>

Im table body füge ich - nach der foreach schleife, an die gleiche Stelle wie im table head, die beiden Reihen mit der Datenausgabe ein. Damit die Daten korrekt zugeordnet werden können, rufe ich über die id aus der content tabelle die zugehörigen Daten (modified_by bzw. modified) ab. Das gelingt mir dank der ObjectList('key') Klasse. Dazu erstelle ich mir die $mod_id. Um bei Modified by nicht nur die id stehen zu haben, lasse ich mir hier den usernamen ausgeben, diesen habe ich ja in der DB Abfrage gezogen:
<td class="small hidden-phone">
<?php $mod_id = (int) $item->id; ?>
<a class="hasTooltip" href="/<?php echo JRoute::_('index.php?option=com_users&task=user.edit&id=' . (int) $modifiers[$mod_id]->modified_by); ?>" title="<?php echo "modified by"; ?>">
<?php echo $modifiers[$mod_id]->name;?></a>
</td>
<td class="small hidden-phone">
<?php $mod_id = (int) $item->id; ?>
<a class="hasTooltip" href="/<?php echo JRoute::_('index.php?option=com_users&task=user.edit&id=' . (int) $modifiers[$mod_id]->modified_by); ?>" title="<?php echo "modified date"; ?>">
<?php echo $modifiers[$mod_id]->modified;
</td>

Das war's.
Wenn euch das mit den oben erwähnten Einschränkungen reicht, dann viel Spaß dabei.

Marco