Erstellungsdatum im Front-End veränderbar

  • Joomla Version
    6.0.1
    PHP Version
    PHP 8.3.x
    Hoster
    Alle

    Redaktoren die im Front-End arbeiten, können bei den Beiträgen im Tab «Veröffentlichung» nur

    Veröffentlichung starten
    Veröffentlichung beenden

    eingeben. Es fehlt das Feld «Erstellungsdatum».

    Vor längerer Zeit hatte ich ein Plugin im Einsatz, welches das Feld «Erstellungsdatum» im Front-End sichtbar und editierbar machte. Irgendwann musste ich es deinstallieren, weil es mit einer damals neuen Joomla-Version nicht mehr kompatibel war. Nun habe ich ChatGPT gebeten, mir ein solches Plugin für Joomla 6 zu erstellen. Das hat er auch gemacht. Sieht recht überzeugend aus. Ich habe die Dateien gezippt, die ZIP-Datei installiert, das Plugin aktiviert. Leider funktioniert es nicht. Das Feld Erstellungsdatum ist nicht sichtbar.

    Der von ChatGPT erzeugte Code ist recht überschaubar. Möchte ihn vielleicht mal jemand, die/der sich damit auskennt, anschauen?

  • Hier noch der von ChatGPT erzeugte Code

    <?php
    defined('_JEXEC') or die;

    use Joomla\CMS\Plugin\CMSPlugin;
    use Joomla\CMS\Form\Form;
    use Joomla\CMS\Factory;

    class PlgContentFrontendcreated extends CMSPlugin
    {
       protected $app;

       public function onContentPrepareForm(Form $form, $data)
       {
           // Nur Frontend
           if (!$this->app->isClient('site')) {
               return true;
           }

           // Nur Artikel
           if ($form->getName() !== 'com_content.article') {
               return true;
           }

           // Erstellungsdatum editierbar machen
           $form->setFieldAttribute('created', 'filter', 'user_utc');
           $form->setFieldAttribute('created', 'showtime', 'true');
           $form->setFieldAttribute('created', 'readonly', 'false');
           $form->setFieldAttribute('created', 'disabled', 'false');

           return true;
       }
    }

  • Kann es sein, dass eine XML-Installationsdatei fehlt?

    Nein, die XML-Datei ist vorhanden, das Plugin wird auch korrekt installiert und ist unter «Plugins» zu finden und aktiviert. Hier noch der Code der XML-Datei

    <?xml version="1.0" encoding="utf-8"?>
    <extension type="plugin" group="content" method="upgrade">
       <name>PLG_CONTENT_FRONTENDCREATED</name>
       <author>Christof Rimle info@rimle.ch, inspired by ChatGPT</author>
       <version>1.0.0</version>
       <description>PLG_CONTENT_FRONTENDCREATED_DESC</description>

       <files>
           <filename plugin="frontendcreated">frontendcreated.php</filename>
       </files>

       <languages>
           <language tag="de-DE">language/de-DE/de-DE.plg_content_frontendcreated.ini</language>
            <language tag="en-GB">language/en-GB/en-GB.plg_content_frontendcreated.ini</language>
       </languages>

       <config />
    </extension>

  • Vermutlich gaht das auch via Plugin, aber warum?

    Wenn ich mich im Frontend als SuperUser anmelde (Joomla 6), gibt es da das Feld Erstellungsdatum auch nicht. Ich muss also einen Override der Datei

    components\com_content\tmpl\form\edit.php

    erstellen, wo ich noch ein

    <?php echo $this->form->renderField('created'); ?>

    einbauen, um das Feld überhaupt zu sehen. Das ist bei den Artikeln leider so. Da wird eine Form nicht einfach durchgerendert.

    .

    Beitrag wird dann auch inklusive dieses Datums gespeichert. Und alles ohne Plugin.

    Dann habe ich mir einen User namens "autor" in der Gruppe "Editor" angelegt, im FE als dieser angemeldet, einen Artikel zum Bearbeiten geöffnet und sehe mit obigem Override das Feld ebenfalls, ändere es auf 10.12.2025, und es wird nach Änderung mitgespeichert und ist dann auch im Backend zu sehen: Hat also geklappt:

    Meint in diesem Fall (also Beiträge), dass das Feld created schon vorhanden ist und gar nicht durch ein Plugin manipuliert werden muss, um schön angezeigt zu werden. Kann man natürlich auch. Als Beispiel: Eine Zeile mehr für das fehlende Label. Sieht dann so aus:

    $this->form->setFieldAttribute('created', 'label', Text::_('JGLOBAL_FIELD_CREATED_LABEL'));

    echo $this->form->renderField('created');

    Man kann dann sicherlich auch noch eine Gruppenberechtigungsweiche um den Code herum legen, wenn man andere Benutzergruppen ausschließen will.

  • Also, Hausaufgabe erledigt. Aber:
    Sah im Backend beim Plugin den Hinweis:
    Macht das Erstellungsdatum von Artikeln im Frontend sichtbar und editierbar > Leider kein Erfolg.

    Created by, sieht man ja nur im Beitrag.
    Published: Start Publishing / Finish Publishing.

    Danach dann Re:Later s Post gesehen. Muss ich noch studieren.

    Liebe Grüße
    Christine

  • Nur als Frage - warum sollte man das Erstellungsdatum ändern?
    Es bewirkt auch, dass die Sortierung nach id und erstellungsdatum nicht mehr konsistent ist und das veröffentlichungsdatum vor dem Erstellungsdatum liegen könnte?

    Na ja, da muss man eben aufpassen ;) Und im Backend darf man das Feld mittlerweile ja auch ändern.

    Ich pflege eine Seite, da werden die Artikel in einem Modul nach Erstellungsdatum sortiert und umsortiert (bei Bedarf). Auf der Seite werden halt auch Artikel eingepflegt, die inhaltlich länger zurückliegen, aber eben für November oder so letzten Jahres einsortiert, angezeigt werden sollen. Die einfachste Lösung in diesem Fall. Allerdings schicke ich die Pflegenden gleich ins Backend, weil Frontendediting in vielen Templates schrottige Formulare anzeigen. Bräuchte man also schon wieder ein Plugin, das auf z.B. Cassiopeia umleitet usw. usf.

  • Nur als Frage - warum sollte man das Erstellungsdatum ändern?

    Ich bin grosser Fan von Bloglayouts (Hauptbeitragsblogs und Kategorienblogs). Oft habe ich da einen einleitenden Beitrag, der sich über die ganze Seitenbreite erstreckt und der immer zuoberst bleiben soll. Die folgenden Beiträge sind dann zweispaltig angeordnet und sollen automatisch (aber erst ab dem zweiten Beitrag) sortiert werden. Das heisst: der jeweils neueste Beitrag soll an zweiter Stelle eingereiht werden, und so weiter. Dies erreiche ich, indem der einleitende Beitrag ein fiktives Erstellungsdatum 31.12.2099 bekommt. Beim Hinzufügen von neuen Beiträgen braucht man also nichts zu ändern und trotzdem bleibt der einleitende Beitrag zuoberst. Würde ich das Veröffentlichungsdatum als Sortierdatum verwenden, würde dieser Trick nicht funktionieren, denn «Veröffentlichen ab 31.12.2099» macht den Beitrag logischerweise unsichtbar. Leider ist die Joomla-Standardeinstellung in den Beitragsoptionen: Sortierdatum = Veröffentlicht.

  • Dafür würde ich die Kategoriebeschreibung verwenden, das bleibt immer oben und lässt auch kreativ anpassen (https://magazine.joomla.org/all-issues/jul…ory-description) ;)

    Das hat tatsächlich was; ich überleg's mir gerne! Die Anleitung sieht auf den ersten Blick zwar etwas aufwändig aus (Custom fields, Override). Aber natürlich könnte man die Custom fields auch einfach weglassen, wenn man (so wie ich) bloss einen einleitenden Text mit Bild braucht. Also kein Subheading und keine Farbeinstellungen.