Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: MODUL: Lexikon / Glossar + ABC Register

    mcm

    • Mitglied
    • Beiträge: 151
    Re: MODUL: Lexikon / Glossar + ABC Register
    Antwort #120 am: 10. Juli 2012, 13:54:47
    kürzer geht die Sortierung so:

    Code: PHP  [Auswählen]
    ORDER BY REPLACE(REPLACE(REPLACE(LOWER(keyword),'ä','a'),'ö','o'),'ü','u') ASC"; // mcm - alphabet. Sortierung im Frontend

    gero01

    • Mitglied
    • Beiträge: 239
    Re: MODUL: Lexikon / Glossar + ABC Register
    Antwort #121 am: 10. Juli 2012, 20:05:03
    Hi Mathias,

    von wegen Anfänger,
    gefällt mir, was Du da geschrieben hast.

    Ergebnis: für den deutschen Sprachnutzer jetzt ok.

    bis später
    (bin ein wenig knapp unter der Woche)
    Gerd

    mcm

    • Mitglied
    • Beiträge: 151
    Re: MODUL: Lexikon / Glossar + ABC Register
    Antwort #122 am: 11. Juli 2012, 14:01:52
    Da ich tatsächlich ein paar Begriffe (bzw. Namen) mit außergewöhnlicher Schreibweise verwende, hab ich hier eine Variante gebastelt, die so ziemlich alle Sonderzeichen berücksichtigt bzw. entsprechend ergänzt werden kann:

    Code: PHP  [Auswählen]
            if(isset($_GET['buchstabe']) && in_array($key,$t)){
    // BOF lolly - Fehler bei Aufrufen einzelner Buchstaben
    // $like = "WHERE keyword LIKE '".$_GET['buchstabe']."%' AND ";
      // BOF mcm - Zuordnung von Umlauten/Sonderzeichen in Lexikon-Liste
          $entitiesToChars = array('&Auml'=>'A', '&AElig'=>'A', '&Agrave'=>'A', '&Aring'=>'A', '&Atilde'=>'A', '&Eacute'=>'E','&Ecirc'=>'E','&Egrave'=>'E',  '&Ntilde'=>'N', '&Oacute'=>'O', '&Ocirc'=>'O', '&Oelig'=>'O', '&Otilde'=>'O', '&Ouml'=>'O', '&Scaron'=>'S', '&szlig'=>'S', '&Uacute'=>'U', '&Ucirc'=>'U', '&Ugrave'=>'U', '&Uuml'=>'U', '&Yacute'=>'Y', '&Yuml'=>'Y'); // kann bei Bedarf ergänzt werden!!!
         
         foreach($entitiesToChars as $entitie => $keyw)  {
            if($keyw == $key) { $entities .= "\nOR keyword LIKE '".$entitie."%'";}
         }  
         $like = "WHERE keyword LIKE '".$key."%'".$entities;
         // echo "TEST DB-Abfrage mit HTML-Entities: <pre>$like</pre>"; // TEST
      // EOF mcm - Zuordnung von Umlauten/Sonderzeichen in Lexikon-Liste
    // EOF lolly - Fehler bei Aufrufen einzelner Buchstaben
            }
     

    Allerdings müssen die verwendeten Buchstaben dann noch bei "ORDER BY REPLACE..." ergänzt werden, da hab ich keine kompakte Lösung gefunden.

    Fehler bitte melden!

    @Gerd: packst Du das mit in die neue Modul-Version, hab nicht so den Durchblick, was Du sonst noch geändert hattest - Daaaanke.

    mcm

    mcm

    • Mitglied
    • Beiträge: 151
    Re: MODUL: Lexikon / Glossar + ABC Register
    Antwort #123 am: 11. Juli 2012, 17:01:38
    Sorry, schon wieder ne neue Version.
    Jetzt komplett mit erweiterbaren HTML-Entities (Sonderzeichen) und deren Sortierung in der Lexikon-Liste im Frontend.

    Wo:
    media/content/lexikon_list.php

    Bitte den gesamten Block ZWISCHEN
    Code: PHP  [Auswählen]
            $key = strtoupper($_GET['buchstabe']);

    UND
    Code: PHP  [Auswählen]
            $lexikon_split = new splitPageResults($lexikon_query, (int)$_GET['page'], (int)$_GET['p']);
     

    Mit Folgendem ersetzen:
    Code: PHP  [Auswählen]

      $entitiesToChars = array('&Auml'=>'A', '&AElig'=>'A', '&Agrave'=>'A', '&Aring'=>'A', '&Atilde'=>'A', '&Eacute'=>'E','&Ecirc'=>'E','&Egrave'=>'E',  '&Ntilde'=>'N', '&Oacute'=>'O', '&Ocirc'=>'O', '&Oelig'=>'O', '&Otilde'=>'O', '&Ouml'=>'O', '&Scaron'=>'S', '&szlig'=>'S', '&Uacute'=>'U', '&Ucirc'=>'U', '&Ugrave'=>'U', '&Uuml'=>'U', '&Yacute'=>'Y', '&Yuml'=>'Y'); // kann bei Bedarf ergänzt werden!!!

            if(isset($_GET['buchstabe']) && in_array($key,$t)){
    // BOF lolly - Fehler bei Aufrufen einzelner Buchstaben
    // $like = "WHERE keyword LIKE '".$_GET['buchstabe']."%' AND ";
      // BOF mcm - Zuordnung+Sortierung von Sonderzeichen in Lexikon-Liste
         foreach($entitiesToChars as $entitie => $keyw)  {
            if($keyw == $key) {
            $entities .= "\nOR keyword LIKE '".$entitie."%'";
            $sqlReplaceTop .= 'REPLACE(';
            $sqlReplaceTail .= ",'".$entitie.";','".$keyw."')";    
            }
         }  
         $like = "WHERE keyword LIKE '".$key."%'".$entities;

      } else {
         foreach($entitiesToChars as $entitie => $keyw)  {
            $sqlReplaceTop .= 'REPLACE(';
            $sqlReplaceTail .= ",'".$entitie.";','".$keyw."')";
         }  
      }
         // echo "TEST DB-Abfrage mit HTML-Entities: <pre>$like</pre>";  // BOF mcm - SQL-Query TEST
         // echo "<pre style=\"width: 350px; overflow: scroll;\">ORDER BY ".$sqlReplaceTop."keyword".$sqlReplaceTail." ASC</pre>";   // mcm - SQL-Query TEST

      // EOF mcm - Zuordnung + Sortierung von Sonderzeichen in Lexikon-Liste
    // EOF lolly - Fehler bei Aufrufen einzelner Buchstaben
        $lexikon_query = "SELECT
                            id,
                            keyword,
                            description
                    FROM
                            "
    . TABLE_LEXIKON . "

                            "
    .$like."
                   
        ORDER BY "
    .$sqlReplaceTop."keyword".$sqlReplaceTail." ASC";
     

    mcm

    • Mitglied
    • Beiträge: 151
    Re: MODUL: Lexikon / Glossar + ABC Register
    Antwort #124 am: 12. Juli 2012, 10:34:50
    Hier nun das Ganze noch mal mit selbsterklärenden Variablennamen und auf Englisch.
    Der Rest ist identisch:

    Wo:
    media/content/lexikon_list.php

    Bitte den gesamten Block ZWISCHEN
    Code: PHP  [Auswählen]
    $key = strtoupper($_GET['buchstabe']);

    UND
    Code: PHP  [Auswählen]
    $lexikon_split = new splitPageResults($lexikon_query, (int)$_GET['page'], (int)$_GET['p']);

    Mit Folgendem ERSETZEN:

    Code: PHP  [Auswählen]
      // BOF mcm - Assignment of specialchars (HTML-Entities) to Lexikon-List        
    $assignToChars = array('&Auml'=>'A', '&AElig'=>'A', '&Agrave'=>'A', '&Aring'=>'A', '&Atilde'=>'A', '&Eacute'=>'E','&Ecirc'=>'E','&Egrave'=>'E',  '&Ntilde'=>'N', '&Oacute'=>'O', '&Ocirc'=>'O', '&Oelig'=>'O', '&Otilde'=>'O', '&Ouml'=>'O', '&Scaron'=>'S', '&szlig'=>'S', '&Uacute'=>'U', '&Ucirc'=>'U', '&Ugrave'=>'U', '&Uuml'=>'U', '&Yacute'=>'Y', '&Yuml'=>'Y'); // mcm - Assignment of specialchars - more can be added!!!
     
      if(isset($_GET['buchstabe']) && in_array($key,$t)){
        // BOF lolly - Fehler bei Aufrufen einzelner Buchstaben
        // $like = "WHERE keyword LIKE '".$_GET['buchstabe']."%' AND ";
        foreach($assignToChars as $specialchar => $char)  {
            if($char == $key) {
              $addSpecialchars .= "\nOR keyword LIKE '".$specialchar."%'";
              $sqlReplaceTop .= 'REPLACE(';
              $sqlReplaceTail .= ",'".$specialchar.";','".$char."')";    
            }
         }  
         $like = "WHERE keyword LIKE '".$key."%'".$addSpecialchars;
     
      } else {
        foreach($assignToChars as $specialchar => $char)  {
            $sqlReplaceTop .= 'REPLACE(';
            $sqlReplaceTail .= ",'".$specialchar.";','".$char."')";
        }  
      }
      //    echo "TEST SQL LIKE with specialchars: <pre>$like</pre>";  // mcm - SQL LIKE TEST with specialchars
      //    echo "TEST SQL ORDER BY:<br /><pre style=\"width: 350px; overflow: scroll;\">ORDER BY ".$sqlReplaceTop."keyword".$sqlReplaceTail." ASC</pre>";   // mcm - SQL ORDER TEST with specialchars
     
        // EOF lolly - Fehler bei Aufrufen einzelner Buchstaben
        $lexikon_query = "SELECT
                            id,
                            keyword,
                            description
                          FROM
                            "
    . TABLE_LEXIKON . "
                          "
    .$like."
                   
       ORDER BY "
    .$sqlReplaceTop."keyword".$sqlReplaceTail." ASC";
      // EOF mcm - Assignment of specialchars (HTML-Entities) to Lexikon-List
     

    - mcm -

    mcm

    • Mitglied
    • Beiträge: 151
    Re: MODUL: Lexikon / Glossar + ABC Register
    Antwort #125 am: 13. Juli 2012, 18:11:20
    Schlage zur Ergänzung des Registers mit Zahlen (neben den Buchstaben) folgende Lösung vor:
    Code: PHP  [Auswählen]
    $abc = range('A', 'Z');
    // $numbs = range('0', '9'); $abc= array_merge($abc,$numbs); // if nubers needed
     

    Ist etwas übersichtlicher und braucht nur auskommentiert werden, wenn keine Zahlen gebraucht werden.

    - mcm -

    mcm

    • Mitglied
    • Beiträge: 151
    Re: MODUL: Lexikon / Glossar + ABC Register
    Antwort #126 am: 13. Juli 2012, 18:49:02
    Dummerweise erzeugt die Ergänzung mit Zahlen einen SQL Fehler, wenn man z.B.
    Code: PHP  [Auswählen]
    &buchstabe=';
    ans Ende der URL setzt.

    Schreinermeister

    • Fördermitglied
    • Beiträge: 415
    • Geschlecht:
    Re: MODUL: Lexikon / Glossar + ABC Register
    Antwort #127 am: 13. Juli 2012, 19:25:12
    Hallo

    Ich habe eben festgestellt, dass bei der Einstellung "acronym" keine Bilder im Beschreibungstext angezeigt werden.
    Ist das so gewollt ?

    Gruß Chris

    gero01

    • Mitglied
    • Beiträge: 239
    Re: MODUL: Lexikon / Glossar + ABC Register
    Antwort #128 am: 13. Juli 2012, 21:24:00
    Hi Mathias,
    hast einiges gemacht in den letzten Tagen. Super !

    gehe mal bitte genauer darauf ein:
    Dummerweise erzeugt die Ergänzung mit Zahlen einen SQL Fehler, wenn man z.B.
    Code: PHP  [Auswählen]
    &buchstabe=';
    ans Ende der URL setzt.
    welche URL ?

    zu Deiner Ergänzung des Registers:
    Hast Du die Variable $abc bewusst doppelt vergeben ?
    $abc = range('A', 'Z');     und   $abc= array_merge($abc,$numbs);

    Übrigens, schön wäre es, mit Hilfe der  lexikon.html den Seitenaufbau zu ändern.
    Alphabet und Ziffernleiste in getrennten Zeilen.
    Ich mache mich mal ran.

    im admin hab ich mal die lexikon.php etwas verändert:
    Code: PHP  [Auswählen]
    <!--
     === SORTIERUNG ===============================================================
    -->
    <?php
          // Keywords ausgeben, wo Buchstabe vorkommt
          // BOF - sort keywords in backend lexikon list
            if($_GET['keyword'] == 'All')
              { $show = 'ORDER BY keyword'; }
            elseif($_GET['keyword'] != 'All')
              { $show = 'WHERE keyword LIKE \''. $_GET['keyword'] .'%\' ORDER BY keyword'; }
            else { $show = 'ORDER BY keyword'; }
          // EOF - sort keywords in backend lexikon list
        ?>
    <table border="0" cellspacing="0" cellpadding="3">
      <tr>
        <td class="lexikon_abc" align="center">&nbsp;<?php echo LEXIKON_NAVIGATION;?>&nbsp;</td>
        <td class="lexikon_abc" width="25" align="center"><a class="lexikon_link" href="<?php echo FILENAME_MODULE_LEXIKON .'?keyword=All">'. LEXIKON_NAVIGATION_ALL;?></a></td>
    <?php
    // Buchstaben fur die Sortierung
    for ($i = "0"; $i <= "9"; $i++)
    {
    ?>
        <td class="lexikon_abc" width="15" align="center">
    <?php
      echo '<a class="lexikon_link" href="'. FILENAME_MODULE_LEXIKON .'?keyword='. $i .'">'. $i .'</a>';
    // nur bis 9 ausgeben
      if($i == '9') { break; }
    ?>
      </td>
    <?php
      }
    ?>
      </tr>
        <td class="lexikon_abc" align="center"></td>
        <td class="lexikon_abc" width="25" align="center"></td>
    <?php
    // Ziffern fur die Sortierung
    for ($n = "A"; $n <= "Z"; $n++)
    {
    ?>
        <td class="lexikon_abc" width="15" align="center">
    <?php
      echo '<a class="lexikon_link" href="'. FILENAME_MODULE_LEXIKON .'?keyword='. $n .'">'. $n .'</a>';
    // nur bis Z ausgeben
      if($n == 'Z') { break; }
    ?>
      </td>
    <?php
      }
    ?>
      </tr>
    </table>
     


    Hallo Chris,

    die letzten Beiträge beziehen sich meist auf die 'POPUP'-Einstellung.
    Die acronym-Einstellung habe ich mir bisher noch nicht genauer angesehen. In meiner Testumgebung wird lediglich ein einfaches HTML-Fenster ausgegeben.

    Gerd

    mcm

    • Mitglied
    • Beiträge: 151
    Re: MODUL: Lexikon / Glossar + ABC Register
    Antwort #129 am: 13. Juli 2012, 23:20:24
    Hallo Gerd + alle die noch durchblicken,

    Variable $abc wird in der zweiten Zeile optional mit den Zahlen erweitert, deshalb wird sie doppelt "befüllt". Wer keine Zahlen braucht, kommentiert Zeile 2 einfach aus.
    Mit der dritten Zeile kannst Du dies testen.
    Code: PHP  [Auswählen]
    $abc = range('A', 'Z');
    $numbs = range('0', '9'); $abc = array_merge($abc,$numbs); // if nubers needed
    echo "<pre>";print_r($abc);echo "</pre>";

    Danach kann in der Datei lexikon_list.php zweimal das range('A', 'Z') sowie einmal $t ersetzt werden mit $abc.

    gehe mal bitte genauer darauf ein:
    Dummerweise erzeugt die Ergänzung mit Zahlen einen SQL Fehler, wenn man z.B.
    Code: PHP  [Auswählen]
    &buchstabe=';
    ans Ende der URL setzt.
    Wenn Du einen Buchstaben anwählst, wird dieser ja per URL übergeben und dann per $_GET['buchstabe'] ausgelesen. Du hattest nun die Variable $t um Zahlen erweitert. $t soll die Übergabe auf die vorgegebenen Werte A-Z und 0-9 begrenzen.

    Ich habe herausgefunden, dass es dabei Probleme mit der Kontroll-Abfrage  && in_array($key,$t) gibt, die plötzlich immer TRUE ausgibt, auch wenn ein anderer Wert übergeben wird, als in $t festgelegt. Übergibst Du nun testweise keinen Buchstaben, sondern zum Beispiel   ';    , gibt es einen SQL-Fehler, da der Code damit unterbrochen wird o.ä..

    Dies ist schnell behoben mit der Ergänzung von ,true am Ende:
    Code: PHP  [Auswählen]
     && in_array($key,$t, true)
    ...dachte ich, dafür ging nun das Aufrufen von Zahlen im Register nicht mehr...Fehlersuche....die 0 bei den Zahlen ist die Ursache - mach mal nur  range('1', '9')  - dann sollte alles gehen. Das ,true kann also wieder raus.
    Wer weiss, wie wir das mit der 0 hinkriegen???
    ...wer nun unbedingt 0815 im Lexikon braucht, soll sich mal selber kümmern...

    Eine Lösung für den Umbruch nach dem Z wäre, im Template in der Datei lexikon.html hinter <li  per IF-Alphabet=1 abzufragen und dann eine CSS-Klasse einzufügen mit clear:left.

    Leider funktioniert das im Explorer (bei mir) nicht.
    Vielleicht geht es mit dem Einfügen von </ul><ul>  vor den Listenpunkt für die Liste mit der Zahl 1 .
    Die neu geöffnete Liste braucht dann ein clear:left und evtl. ein display:block .

    Alles klar?!

    @Chris:
    Hab grad mal nachgeschaut (inc/sb_lexikon_inc.php)...
    Bei dem Acronym wird das Schlagwort ersetzt und als Acronym im Text ausgegeben.
    Die gesamte Beschreibung wird in das Titel-Attribut gesetzt (<acronym title=".......">Schlagwort</acronym> ).
    Hier haben Bilder und HTML-Tags tatsächlich nichts zu suchen, weshalb sie auch per strip_tags() rausgefiltert werden.
    Versuch's mal mit "Popup", da wird alles angezeigt!

    - Mathias -

    mcm

    • Mitglied
    • Beiträge: 151
    Re: MODUL: Lexikon / Glossar + ABC Register
    Antwort #130 am: 14. Juli 2012, 00:44:47
    Weiter geht's mit einer Zusätzlichen Zeile für die (optionalen) Zahlen im Register des Lexikons:

    Wo:
    MyTemplate/module/lexikon.html

    Hinter:
    Code: PHP  [Auswählen]
    {foreach name=lex item=alphabet from=$abc}
    kommt neu dazu:
    Code: PHP  [Auswählen]
    {if $alphabet.buchstabe == "1"}</ul><ul class="lexAlphabet">{/if} {* mcm - if numbers needed *}

    In:
    MyTemplate/style.css

    überall wo steht:
     ul#lexAlphabet ...xyz... {...}

    Folgendes daraus machen:
     ul#lexAlphabet xyz, ul.lexAlphabet xyz {...}

    Also noch die Klasse ul.lexAlphabet ergänzen!

    Bitte noch testen - viel Erfolg!
    - mcm -

    gero01

    • Mitglied
    • Beiträge: 239
    Re: MODUL: Lexikon / Glossar + ABC Register
    Antwort #131 am: 14. Juli 2012, 17:40:58
    Hi Mathias,

    hab erst mal versucht, den '0'-Fehler bei mir zu finden. ...... Nichts, alles gut
        mit Sonderzeichen und Satzzeichen  probiert ( € ; µ ;  " ; . ; ; )
    merkwürdig.

    melde mich, schönes verregnetes WE

    Gerd

    Schreinermeister

    • Fördermitglied
    • Beiträge: 415
    • Geschlecht:
    Re: MODUL: Lexikon / Glossar + ABC Register
    Antwort #132 am: 14. Juli 2012, 18:41:28
    Hallo

    Ich habe eben festgestellt, dass bei der Einstellung "acronym" ganze Textabschnitte durch dieses Modul überschrieben werden.

    z.B. Wenn in der Produktbeschreibung der Wort "abc" aus dem Lexikon auftaucht wird gelegentlich ein ganzer Bereich der Produktbeschreibung mit dem Beschreibungstext des Lexikonwortes "xyz" überschrieben.

    Ich konnte bisher nicht feststellen in welchem Zusammenhang das ganze Auftritt.
    Habe vorerst das Modul abgeschaltet.

    Gruß Chris

    Schreinermeister

    • Fördermitglied
    • Beiträge: 415
    • Geschlecht:
    Re: MODUL: Lexikon / Glossar + ABC Register
    Antwort #133 am: 14. Juli 2012, 19:04:32
    Hallo nochmal

    Ergänzung zum Vorgängerpost.

    Es hängt anscheinend von der Länge des Beschreibungstextets ab.
    ab dem 300-ten Zeichen wird in der Artikelbeschreibung der Lexikonbegriff einfach durch den Lexikon-Beschreibungstext ab Zeichen 301 bis zum Ende der Beschreibung ersetzt.

    ( Ich hoffe das kann jemand verstehen )  :-?

    In der DB ist der Beschreibungstext komplett und richtig gespeichert.
    Auch im Content - Lexikon wird der Text richtig dargestellt.

    Ev. kommt der Fehler von der media/content/lexikon_list.php

    Gruß Chris

    gero01

    • Mitglied
    • Beiträge: 239
    Re: MODUL: Lexikon / Glossar + ABC Register
    Antwort #134 am: 15. Juli 2012, 19:10:36
    Hi mcm,

    nach aller Undurchsichtigkeit, ist mir aufgefallen, das der Adminbereich auch noch eine Baustelle hat.

    Kannst Du mir helfen, wie im Frontend die Umlaut und Zeichenzuordnung hier einzubauen ?

    Code: PHP  [Auswählen]
     // Keywords ausgeben, wo Buchstabe vorkommt
          // BOF - sort keywords in backend lexikon list
            if($_GET['keyword'] == 'All')
              { $show = 'ORDER BY keyword'; }
            elseif($_GET['keyword'] != 'All')
              { $show = 'WHERE keyword LIKE \''. $_GET['keyword'] .'%\' ORDER BY keyword'; }
            else { $show = 'ORDER BY keyword'; }
          // EOF - sort keywords in backend lexikon list
     
    wünsche eine schöne Woche
    Gerd
    1 Antworten
    2006 Aufrufe
    31. August 2016, 19:46:29 von Schreinermeister
    9 Antworten
    5657 Aufrufe
    16. September 2009, 07:12:20 von koshiro
    0 Antworten
    2057 Aufrufe
    18. März 2012, 15:23:36 von petergriffin
    8 Antworten
    4410 Aufrufe
    30. Januar 2011, 13:04:17 von Shorty
               
    anything