Formulardaten aus Plugin im Kategorieblog verwenden

  • Hallo zusammen!


    Ich bin absoluter Joomla!-Anfänger und muss aber für einen Kurs an der Uni ein Template programmieren, mit dem ich die Seite unseres Studiengangs nachbauen soll (CSS- und JavaScript-Dateien werden zur Verfügung gestellt).


    Mit einer Kommilitonin hab ich mich jetzt so weit durchgekämpft, dass es eigentlich nur noch an einem Hauptproblem scheitert: Und zwar mussten wir mit Hilfe eines selbstgeschriebenen Plugins Formularfelder im Backend erzeugen, mit denen Nutzer dann eine Art Steckbrief für sich anlegen können, mit Bild, Name, Telefonnummer etc.. Das funktioniert auch alles und auch die Darstellung der Daten als Artikel haben wir hinbekommen. Jetzt muss noch die Darstellung der Übersicht des Kategorieblogs angepasst werden. Dazu sollen aber Inhalte aus den Formularfeldern in der Artikelvorschau verwendet werden (z.B. der Name der Person).


    Über die Zeile:

    PHP
    <?php echo $params->get('menschen_name'); ?>

    funktioniert es leider nicht.


    Und auch

    PHP
    <?php echo $this->article->getParams()->get('menschen_name'); ?>

    geht nicht.


    Jetzt habe ich versucht an Hand einer Anleitung aus dem Netz die Parameter des Plugins zu importieren:


    PHP
    <?php // Get plugin 'menschen' of plugin type 'content'
    $plugin = JPluginHelper::getPlugin('content','menschen');
    
    
    if($plugin){
        // Get plugin params
        $pluginParams = new JRegistry($plugin->params);
    } ?>


    Aber auch das scheint nicht die richtige Lösung zu sein. thinking


    Kann mir irgendjemand sagen, wie ich Zugriff auf die Formulardaten des Plugins bekomme, wenn ich mich in der Datei blog_item.php befinde?? ?(


    Vielen Dank und Grüße,
    Jes

  • 3. Variante ist jedenfalls unlogisch, weil ihr habt die Felder ja mit dem Beitrag gespeichert(?) und nicht im Plugin.


    Wie zeigt ihr denn die Daten in der Artikel-/Beitragsansicht an?


    Weil eigentlich ist
    $params->get('xxxxx');
    schon richtig, weil sich ja am Anfang der blog_item.php im Normalfall die Zeile
    $params = $this->item->params;
    befindet.


    Deshalb: Auch
    $this->item->params->get('xxxxxx');
    sollte funktionieren.


    Ihr könnt ja mal $this->item->params debuggen


    Code
    echo 'DEBUG: '.print_r($this->item->params, true);exit;


    ob Eure Felder überhaupt im betr. Beitrag drinnen sind. Seite laden, dann im Seitenquelltext anschauen.
    Wäre dann die nächste Möglichkeit, dass evtl. Felder gar nicht in allen Beiträgen gespeichert im Datenbankfeld attribs von Tabelle #__content.


    getParams() ist im Normalfall auch falsch. Zumindest der Joomla-Core kennt diese Methode für $this->article nicht. Das solltet Ihr sehen, wenn Ihr Fehler Berichten während der Entwicklung in der Joomla-Konfiguration auf Developement stellt.

  • Der Code für die Beitragsansicht ist ganz normal:

    PHP
    <?php echo $params->get('menschen_name'); ?>


    Und der funktioniert auch. Aber wie gesagt, in der blog_item.php funktioniert es auf einmal nicht mehr. Und ich hab auch schon $params auslesen lassen und die Formularfelder sind da gar nicht drin, sondern nur die ganzen Einstellungen, die man für die Kategorie vornehmen kann.


    Das kommt raus, wenn ich deinen Code eingebe (Edit: jetzt mit Code-Tag):

    Code
    DEBUG: Joomla\Registry\Registry Object ( [data:protected] => stdClass Object ( [article_layout] => _:default [show_title] => 0 [link_titles] => 1 [show_intro] => 0 [info_block_position] => 0 [info_block_show_title] => 0 [show_category] => 0 [link_category] => 1 [show_parent_category] => 0 [link_parent_category] => 0 [show_author] => 0 [link_author] => 0 [show_create_date] => 0 [show_modify_date] => 0 [show_publish_date] => 0 [show_item_navigation] => 1 [show_vote] => 0 [show_readmore] => 1 [show_readmore_title] => 1 [readmore_limit] => 100 [show_tags] => 1 [show_icons] => 0 [show_print_icon] => 0 [show_email_icon] => 0 [show_hits] => 0 [show_noauth] => 0 [urls_position] => 0 [show_publishing_options] => 1 [show_article_options] => 1 [save_history] => 1 [history_limit] => 10 [show_urls_images_frontend] => 0 [show_urls_images_backend] => 1 [targeta] => 0 [targetb] => 0 [targetc] => 0 [float_intro] => left [float_fulltext] => left [category_layout] => _:blog [show_category_heading_title_text] => 1 [show_category_title] => 0 [show_description] => 0 [show_description_image] => 0 [maxLevel] => 1 [show_empty_categories] => 0 [show_no_articles] => 1 [show_subcat_desc] => 1 [show_cat_num_articles] => 0 [show_cat_tags] => 1 [show_base_description] => 1 [maxLevelcat] => -1 [show_empty_categories_cat] => 0 [show_subcat_desc_cat] => 1 [show_cat_num_articles_cat] => 1 [num_leading_articles] => 1 [num_intro_articles] => 4 [num_columns] => 2 [num_links] => 4 [multi_column_order] => 0 [show_subcategory_content] => 0 [show_pagination_limit] => 1 [filter_field] => hide [show_headings] => 1 [list_show_date] => 0 [date_format] => [list_show_hits] => 1 [list_show_author] => 1 [orderby_pri] => order [orderby_sec] => rdate [order_date] => published [show_pagination] => 2 [show_pagination_results] => 1 [show_featured] => show [show_feed_link] => 1 [feed_summary] => 0 [feed_show_readmore] => 0 [show_page_heading] => [layout_type] => blog [menu_text] => 1 [menu_show] => 1 [pageclass_sfx] => detail-card [secure] => 0 [page_title] => Menschen [page_description] => [page_rights] => [robots] => [access-view] => 1 ) [initialized:protected] => 1 [separator] => . )


    Ich suche aber nach Feldern, die mit "menschen_ " anfangen. Und davon sind keine dabei. :/
    Und die spannende Frage ist ja: Wie bekomme ich die da hin???

  • Lass dir zusätzlich
    $this->item->id;
    des Beitrags ausgeben und prüfe dann im Backend, ob der Beitrag überhaupt gefüllte, eigene Felder hat bzw. überhaupt schon mal mit aktiviertem Plugin gespeichert wurde.


    Der Tipp mit dem Seitenquelltext war übrigens deswegen gemeint, weil die Debug-Ausgabe darin zeilenweise formatiert ist. Und bitte so was immer mit Code-Button pasten.

  • Ok, wenn ich das eingebe, zeigt er mir für den einen Beitrag die ID = 3 an und für den anderen 4. Und das stimmt auch mit dem Backend überein.
    Sorry, aber wie meinst du das, dass ich im Backend überprüfen soll, ob der Beitrag gefüllte Felder hat? Die hat er auf jeden Fall, denn der Beitrag kann ja angeklickt werden und dann komm ich zum vollen Beitrag. Und er wurde auch schon im aktivierten Plugin gespeichert, denn ohne Plugin wären die Felder ja gar nicht da und ich könnte die Werte auch nicht im Frontend ausgeben lassen, oder?

  • Eigentlich nicht. Sie werden ganz normal als Formulardaten gespeichert. Die dritte Variante war nur ein verzweifelter Versuch meinerseits irgendwie an die Daten zu kommen. Aber wie du schon erkannt hast, liest das nur Pluginparameter aus und das ist nicht das, was ich brauche. Ich brauche die Formularfelddaten, also das, was ich im Backend in die Felder eingetragen habe.

  • Zitat

    Sie werden ganz normal als Formulardaten gespeichert.


    Wo steht das in der Datenbank? Dort musst du das auch wieder herholen.


    Ich verstehe das biser so:
    Ihr habt mittels eines Plugins die Eingabe von Daten ermöglicht.
    Diese Eingaben in die Felder des Formulars speichert ihr nicht als einzelne Felder in einer Datenbanktabelle sondern ihr macht daraus einen article für com_content.
    Die Daten sind nicht nicht strukturiert in einer Tabelle gespeichert sondern sie sind irgendwie als html in diesem article enthalten.
    Ist das richtig?
    Falls ja: Wenn du das jetzt wieder ins Formular bringen willst musst du diese html-Texte parsen und die Daten fürs Forular wieder herausoperieren.
    Falls nein: in welcher Tabelle / in welcher Spalte der Datenbank stehen die Formulareingaben? Da musst du sie auch wieder herausholen

  • Diese Eingaben in die Felder des Formulars speichert ihr nicht als einzelne Felder in einer Datenbanktabelle sondern ihr macht daraus einen article für com_content.


    Da die Daten mittels »$params->get('menschen_name');« ausgegeben werden können, müssten sie in der Spalte »attribs« in der Tabelle »content« stehen. Dagegen spricht, dass sie in der Debug-Ausgabe nicht aufgeführt sind.


    Ich suche aber nach Feldern, die mit "menschen_ " anfangen. Und davon sind keine dabei.


    Ich habe mir diesen Zweig gerade durchgelesen. Und ich frage mich wie eurer Plugin genau aussieht und welchen Typ ihr verwendet. Ist es möglich den relevanten Teil hier zu posten?


    Gute Idee, bin ich nicht der einzige, der auf'm Schlauch steht ;)

  • wie meinst du das,...


    Na ja, ich sitz nicht daneben und kann nicht wissen, ob alle anderen Einstellungen stimmen. Vielleicht gibt ja der Kategorieblog versehentlich eine andere Kategorie aus oder die ausgegebene Kategorie hat auch Beiträge, die nicht gefüllt wurden.


    Deshalb frag ich auch noch mal ganz dumm: Du öffnest einen Beitrag unter Inhalt > Beiträge und in diesem befindet sich im HTML-Quelltext ein eigenes Eingabefeld mit

    Code
    <input name="jform[attribs][menschen_name]" id="jform_attribs_menschen_name" ... type="text">


    das gefüllt wird und zusammen mit dem Beitrag gespeichert wird? Wenn man den Beitrag schließt und neu öffnet, ist das Feld nach wie vor gefüllt...


    Nächster Anlauf:
    Gib zu Beginn der blog_item.php ein:


    Code
    $articleParams = new Joomla\Registry\Registry($this->item->attribs);
    echo 'DEBUG: ' . print_r($articleParams, true); exit;


    Da du ja sicher bist, dass der erste Beitrag, der hier landet die betr. Felder gefüllt hat...


    Welche Joomlversion verwendest du?


    Ansonsten musst Euer Plugin, auch XML mal als ZIP anhängen.

  • Ok, am besten ich teile hier mal den Code für das Plugin... :S


    menschen.php:


    menschen.xml:


    Und die content.xml im Ordner "forms" des Plugins:


    Und hier der das Overrite, das wir im Ordner "article" erstellt haben (musste gekürzt werden auf Grund der begrenzten Zeichen, die zur Verfügung stehen, daher nur die Bereiche, die wir angepasst haben):


    Wir haben die Vorlage für das Plugin zur Erstellung der Formularfelder im Backend von unserem Dozenten bekommen (der selber Joomla-Anfänger ist und es aus dem Internet hat) und es einfach abgewandelt. So weit ich es verstanden habe, werden die Eingaben in die Felder in einer Datenbank gespeichert, ist das korrekt? Wenn ja, wie kann ich die an anderer Stelle auslesen?


    Vielen Dank für eure vielen Antworten! Ich hoffe, wir können das Problem zusammen lösen! ^^


    P.S.: Ich bin zwar Joomla-Anfänger, aber ich kenne mich im Backend schon so weit aus, dass ich weiß, welche Einstellungen vorgenommen werden müssen, damit Beiträge in einem Kategorieblog dargestellt werden können. Ich habe ein Praktikum in einer Agentur gemacht, die ausschließlich mit Joomla arbeitet. Ich kenne mich vor allem im Bereich der Template-Programmierung nicht aus, da ich im Praktikum lediglich das CSS bereits vorhandener Templates angepasst habe.


    Edit by @Indigo66: Langen Code in Spoiler, siehe Forenregel!

  • Die Daten werden in der Joomla-Datenbank-Tabelle #__content gespeichert. #_ steht dabei für den Tabellen-Prefix eurer Seite.
    In dieser Tabelle in der Spalte attribs.


    So weit ich sehe, spricht nichts dagegen, dass du die Daten in der Kategorie-Blog-Ansicht wie probiert abfragen kannst, wenn sie gespeichert wurden.


    Deshalb zuerst mal meinen zuletzt geposteten Code oben ausprobieren. Dieser holt $articleParams aus dem Feld attribs des Beitrags, vorbei an den item->params, gänzlich unverändert ("so wie im betreffenden Beitrag gespeichert"), was bei den item->params nicht der Fall ist. Diese durchlaufen zuvor noch einen Bearbeitungsschritt. Deshalb auch meine Frage nach Joomla-Version. Damit man mal schauen kann, ob sich da im Core was getan hat, was Schuld ist.

  • Also, es ist gar nicht vorgesehen, dass item->params alle attribs des Beitrags enthält. Mir ist das nie aufgefallen, weil ich ein eigenes Plugin verwende, dass sich darüm auch im Blög kummert.


    https://github.com/joomla/joom…ls/articles.php#L587-L627


    Diese Zeilen ergeben, dass in bestimmten Layouts, darunter "blog" erst die Menüeinstellungen geholt werden ($menuParamsArray). Dann wird in einer Schleife ausschließlich über die Keys der Menüeinstellungen das $articleArray gefüllt.


    Egal: Mein oben geposteter Code ist also zusätzlich in 'blog'- und 'fetaured'-Views nötig, um an die eigenen Felder in attribs dranzukommen.


    Code
    $articleParams = new Joomla\Registry\Registry($this->item->attribs);
    echo $articleParams->get('menschen_name');
  • Jetzt muss ich doch nochmal fragen: Ich muss auch ein Overrite für Module erstellen. Wie bekomme ich die Attribute der Artikel in das Overrite für das Modul?


    PHP
    <?php $articleParams = new Joomla\Registry\Registry($this->item->attribs);
    echo $articleParams->get('menschen_name'); ?>


    Dieser Code funktioniert dort nämlich leider nicht... ;(

  • Es geht einerseites um das Modul "Beiträge Neueste" und um das Modul "Beiträge News". Beiden wurden Beiträge von verschiedenen Kategorien zugewiesen.
    Ich brauche jetzt auf der Übersicht der Beiträge für Neueste einmal ein Datum das im Backend in einem Formularfeld eingegeben wurde.
    Und für News brauche ich die Kategorie - die kommt aber nicht aus einem Formular - aber sie wird nicht angezeigt, obwohl ich im Backend eingestellt habe, dass die Kategorie angezeigt werden soll.