mpArticleInclude (aka Article Include)

Alles rund um Module und Plugins in CONTENIDO 4.10.
xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

mpArticleInclude (aka Article Include)

Beitrag von xmurrix » Mi 13. Nov 2019, 20:23

Das Modul mpArticleInclude basiert auf der Version 1.0 des Moduls Article Include aus dem CONTENIDO Forum.

Damit lassen sich über das Layout per Marker definierte Inhalte aus CONTENIDO Seiten extrahieren und einbinden. Das Modul ist nicht dafür geeignet, um einzelne Content-Typen aus Artikeln zu extrahieren.

Dabei wird mit Hilfe einer HTTP Anfrage (curl, fsockopen, file_get_contents oder Snoopy) zum Artikel abgesetzt um dann den Inhalt der erhaltenen Antwort, also die Ausgabe zwischen den Markern, auszugeben.

Das Ergebnis der HTTP-Anfrage wird aus Performancegründen gecacht. Ist der Artikel aktueller als die gecachte Version, übernimmt das Modul die neue Artikelversion in den Cache. Damit der Cache korrekt funktioniert, sollten der Web-Server und der Datenbank-Sever die gleichen Zeitzonen verwenden.

Das Originalmodul ist unter folgender Seite zu finden:
http://forum.contenido.org/viewtopic.ph ... 51#p132951


INSTALLATION/VERWENDUNG

Inhalt des Modulpackages in das Modulverzeichnis des Mandanten, z. B. in cms/data/modules/ entpacken.

In gewünschten Layouts die Marker <!--start:content--> und <!--end:content--> setzen, um die Inhalte zwischen den Markern extrahieren zu können. Die Marker sollten HTML-Kommentare sein, damit sie die Ausgabe der Artikel nicht beeinträchtigen, z. B.:

Code: Alles auswählen

...
<!--start:content-->
    <div id="content">
        <container id="123" name="content" types="content" mode="optional" default="">content</container>
        <container id="124" name="content" types="content" mode="optional" default="">content</container>
    </div>
<!--end:content-->
...
Dieses Modul in einer Artikelvorlage einrichten, in der die Inhalte anderer Artikel (die auf Layouts mit den Markern basieren) eingebunden werden sollen.

Einen Artikel erstellen, die auf die Vorlage basiert.

In der Artikelkonfiguration die Kategorie und den Artikel wählen, aus der der Inhalt eingebunden werden soll.


CHANGELOG

2023-03-16 mp_article_include 1.5.0 (für CONTENIDO 4.10.x)
  • change: PHP 8.1 Support
  • change: Auswahl diverser Methoden zum Einbinden (HTTP-Anfragen) von Artikeln
  • change: Cachen des eingebundenen Artikels
  • change: Auf PHP 8 adaptierte Version von Snoopy
  • change: Verwendung des CONTENIDO Plugins "Mp Dev Tools"
2019-11-13 mpArticleInclude 1.4.0 (für CONTENIDO 4.9.x - 4.10.x)
  • change: Ordner "vendor" in "lib" umbenannt
  • change: Update auf Snoopy 2.0.0 mit PHP 7.2 support
2014-07-23 mpArticleInclude 1.3.3 (für CONTENIDO 4.9.x)
  • bugfix: Ermitteln der Länge des Ende-Markers
2013-11-17 mpArticleInclude 1.3.2 (für CONTENIDO 4.9.x)
  • change: Überarbeiten der Moduleingabe und -ausgabe
  • change: Englische Übersetzungen
2013-09-19 mpArticle_Include 1.3.1 (für CONTENIDO 4.9.x)
  • change: Inhalt inkl. Ende-Marker extrahieren
2013-09-10 mpArticle_Include 1.3 (für CONTENIDO 4.9.x)
  • Erste Veröffentlichung des mpArticle_Include Moduls

DOWNLOAD

Das Modul könnt ihr vom GitHub Repository herunterladen:
https://github.com/purcaholic/mpArticleInclude

Grüße
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

shi
Beiträge: 251
Registriert: Fr 5. Nov 2004, 14:12
Kontaktdaten:

Re: mpArticleInclude (aka Article Include)

Beitrag von shi » Fr 10. Jan 2020, 16:47

Funktioniert das Modul auch Mandantenübergreifend? Ich habe zwei Mandanten in einer Contenido-Installationen. Jetzt sollen nur die Inhalte eines Artikels des 1. Mandanten beim 2. Mandanten eingebunden werden. Kann mann das mit dem Modul umsetzen, so das auch das Layout des 2. Mandanten erhalten bleibt?

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: mpArticleInclude (aka Article Include)

Beitrag von xmurrix » Fr 10. Jan 2020, 17:11

...Funktioniert das Modul auch Mandantenübergreifend?...
Nein, momentan können nur Artikel des aktuellen Mandanten eingebunden werden. Das Einbinden von Artikeln anderer Mandanten wäre aber ein nettes Feature für die nächste Version des Moduls.
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

Horst1234
Beiträge: 366
Registriert: Sa 25. Okt 2008, 12:45
Wohnort: Bremen
Kontaktdaten:

Re: mpArticleInclude: Kategorie wählen geht nicht

Beitrag von Horst1234 » Sa 28. Mär 2020, 18:58

Guten Tag,

ich habe die neuste Version 1.4.0 in CONTENIDO 4.10.1 eingebaut.

Immer, wenn ich in den Voreinstellungen der Vorlage eine Kategorie anwählen will, springt das Dropdown sofort zurück auf "bitte wählen..."
In den Logs finde ich:
[28-Mar-2020 18:50:04 Europe/Berlin] PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /usr/www/users/treffl/neu/contenido/classes/class.htmlparser.php on line 479
Wenn ich im Artikel die Kategorie anwählen will, klappt es.
Aber das muss ich dann für alle Artikel einzeln tun, was natürlich sehr aufwändig ist.

Gruß aus Bremen,
Horst
Webdesign | Contenido: Templateprogrammierung, Einrichtung und Verwaltung | http://www.w2media.de

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: mpArticleInclude (aka Article Include)

Beitrag von xmurrix » So 29. Mär 2020, 20:38

Hallo Horst1234,
...Immer, wenn ich in den Voreinstellungen der Vorlage eine Kategorie anwählen will, springt das Dropdown sofort zurück auf "bitte wählen..."...
In den Voreinstellungen der Vorlage wird die Auswahl der Kategorie vom Backend nicht gespeichert, also die CMS-Variable "CMS_VALUE[1]" im Modul wird nicht gesetzt. Daher wird das Dropdown erneut mit "Bitte wählen" angezeigt. Man müsste sich also ansehen, warum die Auswahl nicht gespeichert wird, vermutlich ist das nicht ein Problem des Moduls, sicher bin ich mir aber nicht.
...In den Logs finde ich:
[28-Mar-2020 18:50:04 Europe/Berlin] PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /usr/www/users/treffl/neu/contenido/classes/class.htmlparser.php on line 479...
Diesen Fehler konnte ich nicht reproduzieren, vermutlich ist der Grund ein anderes.

Grüße
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: mpArticleInclude (aka Article Include)

Beitrag von xmurrix » So 29. Mär 2020, 21:30

Hallo nochmal,

das Problem mit den Voreinstellungen der Vorlage konnte eingegrenzt werden. Die Funktionalität in den Voreinstellungen der Vorlage verhält sich anders als die Konfiguration im Artikel. Während es in der Artikelkonfiguration (contenido/includes/include.tplcfg_edit.php) ausreicht, das Formular abzuschicken, wird in den Voreinstellungen der Vorlage (contenido/includes/include.pretplcfg_edit.php) erwartet, dass auf den Senden Button geklickt wurde.

Das lässt sich aber lösen, wenn man in der Moduleingabe "mp_article_include_input.php", die Zeile 113 von

Code: Alles auswählen

$('form[name="tplcfgform"]').submit();
in folgendes ändert:

Code: Alles auswählen

$('form[name="tplcfgform"]').append('<input type="hidden" name="x" value="1">').append('<input type="hidden" name="y" value="1">').submit();
Das ist zwar keine saubere Lösung, funktioniert aber...

Grüße
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: mpArticleInclude (aka Article Include)

Beitrag von Oldperl » Mo 30. Mär 2020, 13:19

Servus,

und wie sähe dann die saubere Lösung aus?

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: mpArticleInclude (aka Article Include)

Beitrag von xmurrix » Mo 30. Mär 2020, 16:06

Hallo,
... und wie sähe dann die saubere Lösung aus?...
Vermutlich sollte das Backend sich in den Voreinstellungen der Vorlage nur darauf verlassen, dass das Formular abgeschickt wurde und nicht zusätzlich prüfen, ob das Speichern-Button geklickt wurde. Warum man das in den Voreinstellungen der Vorlage anders als in der Artikelkonfiguration macht, weiß ich nicht.

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

Horst1234
Beiträge: 366
Registriert: Sa 25. Okt 2008, 12:45
Wohnort: Bremen
Kontaktdaten:

Re: mpArticleInclude (aka Article Include)

Beitrag von Horst1234 » Di 31. Mär 2020, 10:05

Hallo xmurrix,
so klappt es, mercí
Horst
Webdesign | Contenido: Templateprogrammierung, Einrichtung und Verwaltung | http://www.w2media.de

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: mpArticleInclude (aka Article Include)

Beitrag von Faar » Do 18. Mär 2021, 09:27

xmurrix hat geschrieben:
Mi 13. Nov 2019, 20:23

Code: Alles auswählen

<!--start:content-->
    <div id="content">
        <container id="123" name="content" types="content" mode="optional" default="">content</container>
        <container id="124" name="content" types="content" mode="optional" default="">content</container>
    </div>
<!--end:content-->
Guten Morgen alle Miteinander!
Würde dieses <!--start:content--> auch funktionieren, wenn es im Tiny-Editor als HTML irgendwo im Fließtext eingefügt werden würde?
Oder greift das Modul nur auf die Inhalte von Content-Modulen zu und nicht auf den Fließtext?

Ich frage darum, weil ich vorhabe, in einer Kategorie-Seite einen Absatz mit Überschrift von einem anderen Artikel aus der Unterkategorie einzufügen und diese Überschrift dann als #-Anker für Direktverlinkung dient. Und ich möchte dafür kein extra Layout einrichten müssen, falls es sich umgehen ließe. Im Menümodul könnte ich die Unterkategorie dann lediglich als #name an den Menülink ausgeben, so dass nicht der Artikel im Untermenü geöffnet wird sondern in der Hauptkategorie nur auf die Überschrift im Text gesprungen wird.
Also sowas: https://dingenskirchen.odd/main/index.html#subname

Nachtrag:
Oder würde das mod_rewrite Plugin folgendes daraus machen?
https://dingenskirchen.odd/main/#subname/index.html
:?
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: mpArticleInclude (aka Article Include)

Beitrag von xmurrix » Do 18. Mär 2021, 20:16

Hallo Frank,
...Würde dieses <!--start:content--> auch funktionieren, wenn es im Tiny-Editor als HTML irgendwo im Fließtext eingefügt werden würde?
...
Ja, sofern die Marker bei der Ausgabe der Seite enthalten sind, egal, wird das Modul den Inhalt dazwischen einbinden können, da das Modul den Artikel per HTTP-Request holt, um dann den Inhalt zwischen den Markern zu extrahieren.
...Oder würde das mod_rewrite Plugin folgendes daraus machen?
https://dingenskirchen.odd/main/#subname/index.html...
Nein, das AMR-Plugin sollte die URL nicht ändern. Du kannst aber sicherheitshalber die URLs direkt im Modul generieren, anstatt alle bei der Ausgabe der Seite durch das AMR-Plugin ersetzen zu lassen.

Gruß
Murat
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

homtata
Beiträge: 1142
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: mpArticleInclude (aka Article Include)

Beitrag von homtata » Mo 11. Okt 2021, 13:19

Hallo Murat,
ich hatte heute das Problem, dass das Tool (wohl nach einer Sicherheitsrichtlinienverschärfung des Providers) aus heiterem Himmel nicht mehr ging. PHP 7.3, Contenido 4.10.1. Möglicherweise wurde allow_url_fopen auf off gestellt. Nun ja. Die Teilartikel ließen sich weder über snoopy noch file_get_contents aufrufen, während Fremdzugriffe darüber auf andere Server möglich waren. Es ließ sich durch eine Erweiterung des file_get_contents beheben, indem ich folgendes zwischen dem bekannten Code ergänzt habe und Snoopy auskommentiert habe:

Code: Alles auswählen

        $url = cUri::getInstance()->build([
            'idart' => $this->incIdart, 'lang' => $this->lang
        ], true);
		
		$arrContextOptions=array(
			  "ssl"=>array(
					"verify_peer"=>false,
					"verify_peer_name"=>false,
				),
			); 		

        //$snoopy = new \Snoopy\Snoopy();
        //$snoopy->fetch($url);
        //$this->_code = trim($snoopy->results);
        $this->_code = file_get_contents($url, false, stream_context_create($arrContextOptions));

        // Extract content from article code output
        if (!empty($this->_code)) {

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: mpArticleInclude (aka Article Include)

Beitrag von xmurrix » Mo 11. Okt 2021, 16:06

Hallo homtata,

das Setzen dieser Parameter deaktiviert die SSL Verifizierung bei HTTP-Requests.

Anscheinend stimmt irgendetwas mit dem CA Root Zertifikat Bundle auf dem Server nicht.

In der php.ini sollte der Pfad zum CA Root Zertifikat Bundle stehen:

Code: Alles auswählen

[curl]
curl.cainfo="/path/to/curl-ca-bundle.crt"

[openssl]
openssl.cafile="/path/to/curl-ca-bundle.crt"
Wenn nicht, können file_get_contents oder cUrl Anfragen unter HTTPS nicht richtig funktionieren.

Auf anderen Seiten, die unter HTTPS laufen, gibt es dieses Problem nicht, daher müsste geklärt werden, warum das bei dir passiert.

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

Horst1234
Beiträge: 366
Registriert: Sa 25. Okt 2008, 12:45
Wohnort: Bremen
Kontaktdaten:

mpArticleInclude + mehrere Sprachen?

Beitrag von Horst1234 » Do 27. Jan 2022, 17:14

Hallo xmurrix,
ich habe eben dein tolles Modul integriert und nun misslingt es mir leider, in der 2. Sprache (Cont. 4.10.1 + AMR + PHP 7.3) einen Artikel zu importieren.
Ich hab die 2. Sprache mit der 1. sychronisiert, alle Dateien online gestellt, in der Konfiguration wird auch alles richtig angezeigt.
In den Errorlogs fand ich

Code: Alles auswählen

[2022-01-27 16:12:15] Warning: "Database failure: 1064 (You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS a WHERE a.parentid = 0' at line 1) - /neu2022/contenido/main.php?area=con_tplcfg&action=tplcfg_edit&idart=77&idcat=1&frame=4&contenido=ctjl1bvk2oe2tn7qpmcq5e2gbo SELECT a.idpica_alloc as idpica_alloc FROM  AS a WHERE a.parentid = 0
" at reportHalt() [class.db.driver.handler.php(1013)]
	reportHalt() called in file class.db.driver.handler.php(985)
	halt() called in file class.db.driver.handler.php(705)
	query() called in file include.tplcfg_edit_form.php(330) : eval()'d code(181)
	eval() called in file include.tplcfg_edit_form.php(330)
	include_once() called in file main.php(202)
und

Code: Alles auswählen

[27-Jan-2022 16:12:29 UTC] PHP Warning:  Use of undefined constant path - assumed 'path' (this will throw an Error in a future version of PHP) in /mnt/web324/a1/14/5911814/htdocs/neu2022/contenido/includes/frontend/include.front_content.php(762) : eval()'d code on line 193
Hast du eine Idee?
Gruß,
Horst
Webdesign | Contenido: Templateprogrammierung, Einrichtung und Verwaltung | http://www.w2media.de

chris8408
Beiträge: 87
Registriert: So 2. Apr 2006, 19:07
Wohnort: Korschenbroich
Kontaktdaten:

Re: mpArticleInclude (aka Article Include)

Beitrag von chris8408 » Fr 28. Jan 2022, 09:53

Hallo Horst,

das ganze sieht nicht nach mpArticleInclude aus sondern mehr nach Article Liste Reloaded.

Bezüglich der zweiten Error-Log-Warnung folgender Fix:

Nach [name] suchen und durch ['name'] ersetzen
Nach [path] suchen und durch ['path'] ersetzen

Das kommt häufiger vor und besagt, dass name bzw. path als Konstante angesehen werden. Es soll aber hier der Array-Schlüssel sein.
Suchen und ersetzen mit den eckigen klammern.

Bei der ersten Fehlermedlung fehlt im SQL das FROM also die Tabelle. Frage, wieso springt der nicht in die korrekte Zeile. Kannst du deine ALR Konfiguration der Kategorie / Tagging einmal posten.

Gruß,
Christian
--------------------------------------------
Christian John aus Korschenbroich bei Düsseldorf (https://www.john-softwareentwicklung.de)
Selbständiger Web-Entwickler
“There are 10 types of people in the world… those that understand binary and those that don’t.”

Antworten