Artikelhistorie / besuchte Seiten

Alles rund um Module und Plugins in CONTENIDO 4.9.
Antworten
McHubi
Beiträge: 1223
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Artikelhistorie / besuchte Seiten

Beitrag von McHubi »

Hallo,

Aufhänger für dieses Modul war folgendes Thema: http://forum.contenido.org/viewtopic.php?f=90&t=36765. Gewünscht war die Möglichkeit, dem Seitenbesucher die letzten x aufgerufenen Webartikel als Linkliste anzuzeigen. Genutzt wird hierfür der localstorage des verwendeten Webbrowsers. Die Anzahl der zuletzt aufgerufenen Webartikel kann über die Variable $amount_of_entries am Anfang der Modul-Ausgabe festgelegt werden. Für den Linktext wird die Headline des jeweiligen Webartikels verwendet. Die Ausgabe selbst ist "plain-HTML", so dass sich jeder selbst bei der Optik austoben kann...

Modul-Ausgabe

Code: Alles auswählen

<?php
/***********************************************
* article_history_sd output
*
* Author      :     seamless-design Markus Hübner
* Copyright   :     seamless-design Markus Hübner
* Created     :     2016-03-26
************************************************/

/*
important: this module uses information of array $breadcrumb, which is generated by contenido standard module 'head_title'. if you do not implement this module first in your template, 'article_history_sd' does not work. you'll have to determine necessary data right here. to do that, you'll have to turn the following comment-section into executed code by removing comment markers

known issue within contenido 4.9.9 and lower:
if you use standard-module "navigation_breadcrumb", "article_history_sd" won't work. Reason: both modules, "head_title" and "navigation_breadcrumb" use $breadcrumb as an array. If you execute "navigation_breadcrumb", contents of $breadcrumb are replaced and not suitable for using within "article_history_sd". Solution: Rename $breadcrumb within "navigation_breadcrumb" (e.g. $breadcrumb_navigation) and all works fine.
*/

/*
$breadcrumb = array();
// get category path
$helper = cCategoryHelper::getInstance();
foreach ($helper->getCategoryPath(cRegistry::getCategoryId(), 1) as $categoryLang) {
    $breadcrumb[] = $categoryLang->get('name');
}
// load current article information
$article = new cApiArticleLanguage();
$article->loadByArticleAndLanguageId(cRegistry::getArticleId(), cRegistry::getLanguageId());
$headline = strip_tags($article->getContent('CMS_HTMLHEAD', 1));
// append headline of article if existing
if ($headline != '') {
    $breadcrumb[] = $headline;
}
if ($headline === '') {
    $breadcrumb[] = mi18n("STARTPAGE");
}
*/

$amount_of_entries=5;

$uri=$_SERVER['REQUEST_URI'];
$linktext=end($breadcrumb);
?>

<script type="text/javascript">
var var_amount_of_entries=<?php echo $amount_of_entries;?>*2;

if(typeof(Storage)!=="undefined")
  {
  var var_current_localstorage=localStorage.getItem("article_history_sd");

if(var_current_localstorage!=null)
  {
  var array_current_localstorage=var_current_localstorage.split("+++");
  document.write('<hr>');
  var_current_localstorage="";
  for (i=1; i<=var_amount_of_entries; i++)
    {
   if(array_current_localstorage[i]!=undefined)
     {
     if(var_current_localstorage.indexOf(array_current_localstorage[i])<0) // if result is <0, no index is found what means: no similar entry given and article can be listed
       {
       document.write('<a href="'+array_current_localstorage[i]);
       var_current_localstorage+='+++'+array_current_localstorage[i];
       i++;
       document.write('" title="'+array_current_localstorage[i]+'">'+array_current_localstorage[i]+'</a><br/>');
       var_current_localstorage+='+++'+array_current_localstorage[i];
       }
       else i++;
     }
     else i=var_amount_of_entries;
    }
  document.write('<hr>');
  }
  else var_current_localstorage="";

var_new_localstorage="<?php echo '+++'.$uri.'+++'.$linktext; ?>"+var_current_localstorage;
localStorage.setItem("article_history_sd", var_new_localstorage);
  }
</script>
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)
peanut
Beiträge: 246
Registriert: Do 25. Nov 2004, 19:34
Kontaktdaten:

Re: Artikelhistorie / besuchte Seiten

Beitrag von peanut »

Hallo Hubi

Vielen Dank für das geniale Script. Nun läuft es wie es sein sollte mit der einmaligen Ausgabe. Sogar mit der Responsive JQuery Slimmenu Navigation. ( Kann ich nun auch mal jemandem helfen beim Setup wenn gewünscht - Hab einige Tage damit verbracht ) Eine Sache wäre da noch. Da ich den Verlauf in meine Navigation oben mit eingebaut habe und eine Spaltenbreite von ca. 200px habe sind die HTMLHEAD 1 Texte manchmal zu lang. Wäre es möglich von dem Titel ( Eigenschaften 4.9.9 ) die Daten zu nehmen ? Die sind immer kurz und knackig :-) Oder ist dann die Sache mit dem Breadcrumb nicht mehr möglich ?

Ich bin gerade froh das es so läuft und will da nun nichts zerschiessen mit Try and Error - Und vielleicht will ja jemand anderes auch diesen Aufbau.

Danke nochmal
Gruss
Peanut
du liest nie ein Buch und weisst weise der Bildung auszuweichen ....
McHubi
Beiträge: 1223
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Artikelhistorie / besuchte Seiten

Beitrag von McHubi »

Wäre es möglich von dem Titel ( Eigenschaften 4.9.9 ) die Daten zu nehmen ?
Ja. Würde ich aber nicht empfehlen, da die im Backend vergebenen Title oftmals - kommt eben immer auf die Redakteure an - etwas "schlampig" vergeben werden.
Oder ist dann die Sache mit dem Breadcrumb nicht mehr möglich ?
Richtig. Die Datenquelle wäre eine andere.
...sind die HTMLHEAD 1 Texte manchmal zu lang
Die Headlines sind an sich optimal, da diese Headlines dem Seitenbesucher bereits bekannt sind - er hat den Artikel ja schon geöffnet und zumindest ein Blick darauf geworfen. Der im Backend vergebene Title ist nicht unbedingt identisch und so würde der Wiedererkennungseffekt fehlen. Zu Deinem Problem mit zu langen Headlines, gibt es mehrere Lösungen. Das wäre zum einen die Schriftgröße um ein paar mehr Buchstaben unterzubringen und/oder zum anderen die Möglichkeit den String nach einer bestimmten Anzahl Zeichen zu kürzen.

Wirf mal einen Blick hierauf: http://php.net/substr. Das wendest Du dann auf $linktext an. :wink:
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)
peanut
Beiträge: 246
Registriert: Do 25. Nov 2004, 19:34
Kontaktdaten:

Re: Artikelhistorie / besuchte Seiten

Beitrag von peanut »

Ist schon etwas älter das Modul und man sollte document.write gegen .innerhtml austauschen. Irgendwie ... :-)
du liest nie ein Buch und weisst weise der Bildung auszuweichen ....
peanut
Beiträge: 246
Registriert: Do 25. Nov 2004, 19:34
Kontaktdaten:

Re: Artikelhistorie / besuchte Seiten

Beitrag von peanut »

Dann habe ich eben noch bemerkt, das das Modul nicht auf der Home ( Globale Startseite ) funktioniert. Woran kann das liegen ? Evtl. an der .htaccess ? Mode rewrite ?

Vielleicht hat ja jemand eine Idee.

Danke im Voraus
Peanut
4.10.1
du liest nie ein Buch und weisst weise der Bildung auszuweichen ....
McHubi
Beiträge: 1223
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Artikelhistorie / besuchte Seiten

Beitrag von McHubi »

Hallo peanut,
Ist schon etwas älter das Modul und man sollte document.write gegen .innerhtml austauschen.
Ja, es ist "betagt". Ich bin allerdings komplett ausgelastet und finde keine Zeit das Modul zu überarbeiten. Du kannst das gerne übernehmen, der Code ist ja "frei".
Dann habe ich eben noch bemerkt, das das Modul nicht auf der Home ( Globale Startseite ) funktioniert. Woran kann das liegen ?
Gute Frage. Soweit ich mich da zurück entsinnen kann, hat das überall funktioniert als ich das damals erstellt habe. Müsste man sich im konkreten Fall anschauen - Problem: keine Zeit dafür, meine Projekte und der Hauptjob fressen meine Ressourcen auf.

VG

Markus
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)
peanut
Beiträge: 246
Registriert: Do 25. Nov 2004, 19:34
Kontaktdaten:

Re: Artikelhistorie / besuchte Seiten

Beitrag von peanut »

Also ich hab mal etwas vom ChatBot generieren lassen - Fair use

Es scheint so als würde das gehen. Zumindest auf meiner 4.10. Es ist etwas Grund Design dabei als <ol><li>

Es werden die letzten 0 - 5 Artikel angezeigt. Kann man anpassen. La Voila. Ohne document.write wie gewünscht :-)

Einziges Manko ist die Globale Startseite. Dort wird aus mir unerklärlichen Gründen nichts ausgegeben. Ansonsten geht alles.

Modul > in die Ausgabe !!
#####################

Code: Alles auswählen

<div class="boxt" id="box">
  <h4>Meine besuchten Seiten</h4>
  <?php
    $breadcrumb = array();
    // get category path
    $helper = cCategoryHelper::getInstance();
    foreach ($helper->getCategoryPath(cRegistry::getCategoryId(), 1) as $categoryLang) {
        $breadcrumb[] = $categoryLang->get('name');
    }
    // load current article information
    $article = new cApiArticleLanguage();
    $article->loadByArticleAndLanguageId(cRegistry::getArticleId(), cRegistry::getLanguageId());
    $headline = strip_tags($article->getContent('CMS_HTMLHEAD', 1));
    // append headline of article if existing
    if ($headline != '') {
        $breadcrumb[] = $headline;
    }
    if ($headline === '') {
        $breadcrumb[] = mi18n("STARTPAGE");
    }
    $amount_of_entries = 5;
    $uri = $_SERVER['REQUEST_URI'];
    $linktext = end($breadcrumb);
  ?>
  <script>
    var var_amount_of_entries = "<?php echo $amount_of_entries;?>" * 2;
    if (typeof(Storage) !== "undefined") {
      var var_current_localstorage = localStorage.getItem("article_history_sd");
      var list = '<ol class="rounded-list">';
      if (var_current_localstorage !== null) {
        var array_current_localstorage = var_current_localstorage.split("+++");
        var var_current_localstorage = "";
        for (var i = 1; i <= var_amount_of_entries; i++) {
          if (array_current_localstorage[i] !== null) {
            if (var_current_localstorage.indexOf(array_current_localstorage[i]) < 0) {
              list += '<li><a href="' + encodeURI(array_current_localstorage[i]);
              var_current_localstorage += "+++" + array_current_localstorage[i];
              i++;
              list += '" title="' + array_current_localstorage[i] + '">' + array_current_localstorage[i] + "</a></li>";
              var_current_localstorage += "+++" + array_current_localstorage[i];
            } else {
              i++;
            }
          } else {
            i = var_amount_of_entries;
          }
        }
        list += "</ol>";
      } else {
        var_current_localstorage = "";
      }
      var var_new_localstorage = "<?php echo '+++'.$uri.'+++'.$linktext; ?>" + var_current_localstorage;
      localStorage.setItem("article_history_sd", var_new_localstorage
);
document.getElementById("box").innerHTML = list;
}
</script>
</div>
Die <div id="box"> sollte nicht geändert werden.

Fragen dazu kann ich nicht beantworten, da ich keine grosse Ahnung habe von dem Code.
du liest nie ein Buch und weisst weise der Bildung auszuweichen ....
Faar
Beiträge: 1945
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Hat sich bedankt: 6 Mal
Kontaktdaten:

Re: Artikelhistorie / besuchte Seiten

Beitrag von Faar »

peanut hat geschrieben: Mo 23. Jan 2023, 18:14 Also ich hab mal etwas vom ChatBot generieren lassen
Vorsicht bei ChatGPT, der murkst meistens etwas zusammen was nicht passt. Man kann es höchstens als Gedankenstütze nehmen.
Bei Javascript ist er besser als bei PHP und für Contenido müsste man ihm die Ressourcen von github angeben.
Ich habe bei dem Code Zweifel.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.
peanut
Beiträge: 246
Registriert: Do 25. Nov 2004, 19:34
Kontaktdaten:

Re: Artikelhistorie / besuchte Seiten

Beitrag von peanut »

Er geht ... Konsole keine Fehler. Error log keine Fehler. Das reicht mir - zumindest bei dem mini Modul. Der Bot macht immer erstmal Fehler. Soweit meine Erfahrung. Nach dem dritten oder vierten Abbruch mit nochmal von vorne ( macht er ja ganz gerne mal abbrechen ) kommt dann aber immer das Richtige. Muss man halt auch richtig füttern. Also ich bin komplett überzeugt von dem Tool. Egal in welcher Richtung. Auch wenn es noch nicht 100% perfekt ist so ist es doch eine erhebliche Hilfe und aus dem nächsten Jahrhundert.

Ich muss evtl. noch ergänzen, das ich den alten Code an den Bot übergeben habe mit dem Auftrag diesen "alten" code ohne document.write dafür mit innerhtml neu zu schreiben. Ist also schon auf einer Contenido Basis erstellt worden der Code.

import github ? Kannst dazu was sagen ? Das wollte ich als nächstes mal probieren mit den ganzen import Möglichkeiten.

Gruss
Peanut
du liest nie ein Buch und weisst weise der Bildung auszuweichen ....
Antworten