Ergebnis 1 bis 10 von 10

Thema: Zeichenkette suchen und ersetzen

  1. #1
    Contao-Nutzer
    Registriert seit
    10.10.2011.
    Beiträge
    39

    Standard Zeichenkette suchen und ersetzen

    hallo zusammen,

    ich habe eine relativ einfache frage: ich möchte in einem template die php-funktion str_replace einsetzen, aber ich hab von php leider zu wenig ahnung (nämlich keine ). ist wahrscheinlich ganz einfach, kann mir bitte jemand helfen?
    folgendes soll geschehen: str_replace soll auf der ganzen seite nach einer zeichenkette suchen $search und ersetzen $replace. wie kann ich das jetzt auf den ganzen body-tag anwenden, oder, noch besser, nur auf ein bestimmtes div 'div id="container"'?

    kleiner nachtrag: ich möchte dem zu suchenden string "DIE SUCHWORTE" auf diesem weg eine klasse zuweisen, es soll also ' <span class="meineKlasse">DIE SUCHWORTE</span>' werden.
    Geändert von coolflame (07.11.2012 um 09:14 Uhr)

  2. #2
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Ich gehe mangels Informationen mal davon aus, dass du per outputFrontendTemplate die Daten verändern möchtest?
    Dann bietet sich simple_html_dom an. Anbei ein einfaches Beispiel:

    https://github.com/c4y/gridclearing

    Gruß

  3. #3
    Contao-Nutzer
    Registriert seit
    10.10.2011.
    Beiträge
    39

    Standard

    ok, dann versuche ich es etwas ausführlicher zu erklären:

    in den texten der webseite taucht immer wieder der firmenname auf. ich möchte mit der gefragten funktion den firmennamen (zwei worte) aus den texten heraussuchen und (in diesem fall) ein umgebendes <span> hinzufügen.
    ich dachte es müsste etwa so aussehen:

    PHP-Code:
    $suche "Firmen Name";
    $ersatz "<span class=\"klasse\">Firmen Name<\/span>";
    echo 
    str_replace($suche$ersatz, %body%); 
    aber wie gesagt, ich kenne mich damit zu wenig aus und es funktioniert auch nicht ...

  4. #4
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Was klappt denn nicht? Hast du schon ein Modul angelegt?

    Erstelle unter system/modules ein Ordner, hier jetzt exemplarisch modulname genannt.
    In die modulname/config/config.php trägst du folgendes ein:

    PHP-Code:
    <?php
    $GLOBALS
    ['TL_HOOKS']['outputFrontendTemplate'][] = array('MeineKlasse''replaceFirmenname');
    ?>
    Dann erstellst du eine Datei modulname/MeineKlasse.php mit folgendem Inhalt:

    PHP-Code:
    <?php
    class MeineKlasse {
        public function 
    replaceFirmenname($strContent$strTemplate) {
            if (
    $strTemplate == "fe_page")
            {
               
    $suche "Firmen Name"
               
    $ersatz "<span class=\"klasse\">Firmen Name<\/span>"
               return 
    str_replace($suche$ersatz$strContent);
            }
        }
    }

    ?>
    Meine Klasse ersetzt du durch einen sinnvollen Klassennamen.

  5. #5
    Contao-Nutzer
    Registriert seit
    10.10.2011.
    Beiträge
    39

    Standard

    ja wie geil ist das denn bitte! viiielen dank, das funktioniert bestens! musste allerdings den code im span ändern, die angabe \" ist da falsch, es muss \' heißen.
    allerdings funktioniert es auch ein wenig zu gut: in der browser-titelleiste ist der span-tag auch drin, zb.
    kann man die funktion noch ein wenig beschränken, so dass sie nur auf bestimmte bereiche (zb einen div-container, oder auch mehrere elemente) zugreift?

  6. #6
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Hier mal ein Versuch. Ist ungetestet.
    Du musst noch die simple_html_dom.php in den Modul-Ordner kopieren. Am besten die von Andreas Schempp leicht angepasste Version. Findest du auch bei mir in Github.

    PHP-Code:
    <?php 

    include_once('simple_html_dom.php');

    class 
    MeineKlasse 

    public function 
    replaceFirmenname($strContent$strTemplate) { 

      
    $suche "Firmen Name";  
      
    $ersatz "<span class=\"klasse\">Firmen Name<\/span>";
      
    $bereiche = array("#main""#left""#footer");

      if (
    $strTemplate == "fe_page"
      { 
         
    $html str_get_html($strContent);
         foreach (
    $bereiche as $bereich)
         {
           
    $nodes $html->find($bereich);
           if (
    count($nodes) > 0
           {
              foreach (
    $nodes as $node) {
              
    $node->innertext str_replace($suche$ersatz$node->innertext);
           }
         }
          
         
    $strContent $html->save();
         return 
    $strContent;

       }
    }
    ?>

  7. #7
    Contao-Yoda Avatar von MacKP
    Registriert seit
    15.06.2009.
    Ort
    Duisburg
    Beiträge
    13.292
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hallo coolflame,
    wenn du so viele Einstellungen haben möchtest, dann guck dir einfach mal die Erweiterung autolink von Andreas Schempp an. Funktioniert bei mir noch mit 2.11.x und da kann man dann wirklich sehr detailiert bestimmen was man da alles ersetzt haben möchte oder eben nicht.

    Viele Grüße
    Contao Pool | C-C-A | MetaModels | [Internetseite -> Mediendepot Ruhr]
    [Arbeitet bei -> Paus Design & Medien]
    "I can EXPLAIN it to you, but I can't UNDERSTAND it for you."

  8. #8
    Contao-Nutzer
    Registriert seit
    10.10.2011.
    Beiträge
    39

    Standard

    @lomex -

    danke, aber so legt's die seite lahm (weiß). keine ahnung, was es da verhaut ...


    @mackp -

    danke, schau ich mir mal an. aber die variante von lomex finde ich super, denn das ist genau das was ich wollte



    NACHTRAG ...

    @lomex -

    die erweiterung, die mackp vorschlägt kann das auch, was du mir da gebaut hast.

    @mackp -

    cooles teil. ist im prinzip das, was lomex für mich gemacht hat. dankeschön für den tipp!
    Geändert von coolflame (14.11.2012 um 15:21 Uhr)

  9. #9
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Nur der Vollständigkeit halber. Habe ein paar Klammern vergessen. Ohne IDE ist es halt doof :-)
    So läuft es und ist getestet.

    PHP-Code:
    <?php

    include_once('simple_html_dom.php');

    class 
    MeineKlasse {

        public function 
    replaceFirmenname($strContent$strTemplate)
        {

          
    $suche "system";
          
    $ersatz 'SYSTEM';
          
    $bereiche = array("#main""#left""#footer");

          if (
    $strTemplate == "fe_page")
          {
             
    $html str_get_html($strContent);
             foreach (
    $bereiche as $bereich)
             {
               
    $nodes $html->find($bereich);
               if (
    count($nodes) > 0)
               {
                  foreach (
    $nodes as $node)
                  {
                     
    $node->innertext str_replace($suche$ersatz$node->innertext);
                  }
               }

               
    $strContent $html->save();
               return 
    $strContent;

             }
          }
        }
    }
    ?>

  10. #10
    Contao-Nutzer
    Registriert seit
    10.10.2011.
    Beiträge
    39

    Standard

    PERFEKT! schließ dich in mein nachtgebet ein

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •