Managed Server
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: Schriftgröße der Kurzbeschreibung in der Bestellabwicklung verkleinern?

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Dann zerschießt es das, weil alle schließen font Tags weg sind.

    Alternative wäre striptags ....  http://php.net/manual/de/function.strip-tags.php

    Da kann man definieren was man nicht löschen will (hier die Variable $tags_allowed Zeile 3)

    Also so:

    Code: PHP  [Auswählen]
        <?php
        // list of allowed tags
        $tags_allowed="<p><a><em><i><b><div><strong><br><br />";

         
        // include ('ipcheck.php');
        require_once('includes/application_top.php');
         
        // get products_descriptions
        $sql="SELECT products_id,products_description,products_short_description FROM products_description";
        $result = xtc_db_query($sql);
        $products_descriptions = Array();
        while($row = mysql_fetch_assoc($result)){
                $products_descriptions[] = $row;
        }
         
        foreach ($products_descriptions as $products_description) {
                $updatewhere = "products_id = '". (int)$products_description['products_id'] ."'";
                $data['products_short_description'] = strip_tags($products_description['products_short_description'],$tags_allowed);
                if (  $data['products_short_description'] !== $products_description['products_short_description']) {
                        xtc_db_perform('products_description',$data , 'update', $updatewhere);
                        echo 'Beschreibungstext korregiert f&uuml;r Artikel ID: ' . $products_description['products_id'] . "<br />\n";
                }
        }
         
        ?>

    Damit fliegen alle Tags weg außer denen die oben definiert sind: <p><a><em><i><b><div><strong><br><br />

    Zu Deiner Frage wo der Code hinsoll .... Kopier den einfach komplett in einen Notepad, speicher die Datei mit .php als Endung (z.B. fix_descriptions.php) und kopiere die in den Shoproot.
    Dann im Browser aufrufen
    http://deinshop.tld/fix_descriptions.php

    ... Denk an die Datensicherung!

    Zitat von: PHP Anleitung
    Warnung

    Da strip_tags() HTML nicht wirklich validiert, kann es passieren, dass bei unvollständigen oder unkorrekten Tags mehr Text/Daten gelöscht werden als erwartet.

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Das
    Code: PHP  [Auswählen]
        <div><font face="Verdana"><font size="2"><span style="font-size: 8.5pt; font-family: Verdana;">Text...</span></font></font></div>
    sollte dann theoretisch danach so aussehen:
       
    Code: PHP  [Auswählen]
    <div>Text...</div>

    Alex23

    • Fördermitglied
    • Beiträge: 197
    @Bonsai

    WOW, ich habe dein 2. PHP-Script angewandt und es klappt tatsächlich!
    Was ist denn, wenn ich noch weitere Tags wie z. B. <h1> in der Kurzbeschreibung entfernen möchte?
    Kann ich dann das Script erweitern und erneut drüber laufen lassen oder muss ich jedes Mal ein neues Script verfassen und starten?

    Welche Scripte brauche ich denn, um auch die Artikelbeschreibung und Texte im Content Manager abzuändern?
    Würde es dir etwas ausmachen, mir auch da mal unter Arme zu greifen?

    Gruß + danke,

    Alex23

    Alex23

    • Fördermitglied
    • Beiträge: 197
    @Bonsai

    Sorry, kleines Missverständnis! Sehe gerade, daß das Script ja alle Tags rauswirft ausser denen, die unter "// list of allowed tags" stehen! Ergo wird dann auch der Tag <h1> entfernt.

    Gruß + danke,

    Alex23

    Alex23

    • Fördermitglied
    • Beiträge: 197
    @Bonsai

    Die Texte im Content Manager habe ich mittlerweile händisch abgeändert, da es ja nicht viel ist.
    Jetzt fehlt mir nur noch ein PHP-Script für die Artikelbeschreibung und dann bin ich wunschlos glücklich!

    Ich würde mich sehr freuen, wenn Du mir da ebenfalls behilflich wärst.

    Gruß + danke,

    Alex23

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Alex, bitte beginnen selbstständig zu denken. Ich hab da jetzt schnell mal ein Universaltool daraus gebaut. Damit sollten sich weitere Fragen erübrigen. Insbesondere, weil das ganze jetzt ausführlichst kommentiert ist und man auch ohne Programmierkenntnisse in der lage sein sollte den Code zu verstehen.
    Code: PHP  [Auswählen]
    <?php
            // Textkorrekturen in modified Datenbanken
            // DATENSICHERUNG VOR AUSFÜHRUNG!!!
            // Der Befehl strip_tags kann zu unerwünschten Ergebnissen führen, wenn fehler in den Tags der Quelldaten sind!!!
           
            // Vor ausführen einstellen welche Tags nicht entfernt werden sollen und tabelle, ID Feld in der Tabelle, und gewünschtes Feld eintragen
            // Vorausgewählt ist hier Feld products_description in Tabelle products_description
           
            // hier alle tags eintragen die NICHT entfernt werden sollen
        $tags_allowed="<p><a><em><i><b><div><strong><br><br />";

            // Datenbankfeld - hier das Datenbankfeld eintragen
            $db_field="products_description";
            // Datenbankindexfeld - hier das Datenbankfeld eintragen, das für diese Tabelle die ID definiert
            $db_index="products_id";
            // Tabelle - hier die Tabelle eintragen
        $db_table="products_description";
           
        // hole Tabelle aus Datenbank
        $sql="SELECT " . $db_index . "," . $db_field . " FROM " . $db_table;
        $result = xtc_db_query($sql);
        $table_fields = Array();
        while($row = mysql_fetch_assoc($result)){
                $table_fields[] = $row;
        }
        // Schleife über alle Zeilen
        foreach ($table_fields as $table_field) {
                            // definiere was in der Datenbank geändert werden soll
                $updatewhere = $db_index . " = '". (int)$table_field[$db_index] ."'";
                            // entferne alle Tags die nicht in $tags_allowed enthalten sind
                $data[$db_field] = strip_tags($table_field[$db_field],$tags_allowed);
                            // wenn sich die Daten geändert haben
                if (  $data[$db_field] !== $table_field[$db_field]) {
                                            // schreibe in die Datenbank
                        xtc_db_perform($db_field,$data , 'update', $updatewhere);
                                            // und gebe auf dem Bildschirm aus für welche ID eine Änderung vorgenommen wurde
                        echo 'Text korregiert f&uuml;r Artikel ID: ' . $table_field[$db_index] . "<br />\n";
                }
        }
         
        ?>

    Achtung, ungetestet! Hab das nur schnell runtergetippt.

    Alex23

    • Fördermitglied
    • Beiträge: 197
    @Bonsai

    das hatte ich gestern abend bereits versucht und irgendwann aufgegeben!
    Ich habe nun dein Universaltool mal mit deinem 2. PHP-Script verglichen und scheitere schon allein daran, daß ich noch nicht einmal genau weiss, wofür es ist.
    Das ist irgendwie anders aufgebaut als das 2. PHP-Script.

    // Vorausgewählt ist hier Feld products_description in Tabelle products_description -> Das ist doch die Artikelbeschreibung oder?

    Bei genauerer Betrachtung vermute ich, daß es schon für die Artikelbeschreibung vordefiniert ist.
    Ich würde jetzt nur noch die ipcheck:
    Code: PHP  [Auswählen]
            // include ('ipcheck.php');
            require_once('includes/application_top.php');

    einbauen und dann dieses 3. Script starten.
    Bitte korrigiere mich, falls ich da falsch liege!

    Gruß + danke,

    Alex23

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    die ipcheck kannst Du getrost ignorieren. Die ist für mich selbst gewesen, weil ich das erste script in einer etwas anderen Form (2 Felder statt eins und andere Ersetzungen) produktiv einsetze und das script soll sich selbst beenden wenn es nicht von meiner eigenen IP aufgerufen wird.

    Wichtig für Dich ist der Teil:
    Code: PHP  [Auswählen]
            // hier alle tags eintragen die NICHT entfernt werden sollen
        $tags_allowed="<p><a><em><i><b><div><strong><br><br />";
     
            // Datenbankfeld - hier das Datenbankfeld eintragen
            $db_field="products_description";
            // Datenbankindexfeld - hier das Datenbankfeld eintragen, das für diese Tabelle die ID definiert
            $db_index="products_id";
            // Tabelle - hier die Tabelle eintragen
        $db_table="products_description";
     

    Jetzt vorausgewählt ist die Tabelle products_description. In dieser Tabelle ist die Spalte products_id die eindeutige Spalte über die man die Zeile eindeutig identifizieren kann.
    Das Feld das vorausgewählt ist, heißt auch products_description.

    wenn Du z.B. products_short_description in der Tabelle products_description wählen wolltest, dann würdest Du das einfach so ändern:
    Code: PHP  [Auswählen]
            // hier alle tags eintragen die NICHT entfernt werden sollen
        $tags_allowed="<p><a><em><i><b><div><strong><br><br />";
     
            // Datenbankfeld - hier das Datenbankfeld eintragen
            $db_field="products_short_description";
            // Datenbankindexfeld - hier das Datenbankfeld eintragen, das für diese Tabelle die ID definiert
            $db_index="products_id";
            // Tabelle - hier die Tabelle eintragen
        $db_table="products_description";
     

    Der Rest ist die eigentliche Logik (ich kommentiere mal extremst ausführlich jetzt)
    Code: PHP  [Auswählen]
        // hole Tabelle aus Datenbank
    // SQL Code: Lese die beiden Spalten mit den Namen definiert in den Variablen $db_index und $db_field aus der Tabelle mit dem Namen definiert in der Variable $db_field
        $sql="SELECT " . $db_index . "," . $db_field . " FROM " . $db_table;
    // lasse die Datenbank den Befehl ausführen
        $result = xtc_db_query($sql);
    // Erzeuge ein Array für die Ausgabe der Datenbank
        $table_fields = Array();
    // Schleife über alle Ausgabeergebnisse der obigen Datenbankabfrage
        while($row = mysql_fetch_assoc($result)){
    // Füge das Array dass eine Zeile der Datenbankabfrage enthält an das Array $table_fields an.
                $table_fields[] = $row;
        }
        // Schleife über das Array $table_fields. Bei jedem Durchlauf seht in der Variable $table_field eine Zeile der SQL Abfrage zur verfügung
        foreach ($table_fields as $table_field) {
                            // definiere was in der Datenbank geändert werden soll
                            // die Variable muss einen Teil einer UPDATE SQL Anweisung enthalten
                $updatewhere = $db_index . " = '". (int)$table_field[$db_index] ."'";
                            // entferne alle Tags die nicht in $tags_allowed enthalten sind
                            // hier wird die eigentliche Arbeit erledigt. Das Entfernen der unerwünschten Tags
                            // wobei die Variable $tags_allowed alle tags enthält die vom Befehl strip_tags ignoriert werden sollen
                $data[$db_field] = strip_tags($table_field[$db_field],$tags_allowed);
                            // frage ab, ob das Ergebnis nach entfernen der tags ein anderes ist, als zuvor
                if (  $data[$db_field] !== $table_field[$db_field]) {
                                            // wenn das der Fall ist, schreibe in die Datenbank
                        xtc_db_perform($db_field,$data , 'update', $updatewhere);
                                            // und gebe auf dem Bildschirm aus für welche ID eine Änderung vorgenommen wurde
                        echo 'Text korregiert f&uuml;r Artikel ID: ' . $table_field[$db_index] . "<br />\n";
                }
        }
         
     

    Was ich wohl vergessen hatte.
    Code: PHP  [Auswählen]
     require_once('includes/application_top.php');
    Wird zwingend benötigt, da ich Funktionen wie xtc_db_perform einsetze die von der Shopsoftware stammen und durch die application_top.php bin ich auch sofort an der Datenbank authentifiziert.

    Also final nochmal zusammengefasst, für den nächsten der das oder ein vergleichbares Problem mit seinen Daten hat und es auf diesem Weg ausbügeln will:
    Code: PHP  [Auswählen]
        <?php
            // Textkorrekturen in modified Datenbanken
            // DATENSICHERUNG VOR AUSFÜHRUNG!!!
            // ACHTUNG, Da das Script so nur im shoproot funktioniert kann es JEDER WELTWEIT aufrufen, also unbedingt wieder löschen!!!
            // Der Befehl strip_tags kann zu unerwünschten Ergebnissen führen, wenn fehler in den Tags der Quelldaten sind!!!

            // Vor ausführen einstellen welche Tags nicht entfernt werden sollen und tabelle, ID Feld in der Tabelle, und gewünschtes Feld eintragen
            // Vorausgewählt ist hier Feld products_description in Tabelle products_description
            // Wer wissen will welches feld er benötigt, bemühe bitte die Wiki: https://www.modified-shop.org/wiki/Kategorie:Datenbankreferenz

            // hier alle tags eintragen die NICHT entfernt werden sollen
            $tags_allowed="<p><a><em><i><b><div><strong><br><br />";

            // Datenbankfeld - hier das Datenbankfeld eintragen
            $db_field="products_description";
            // Datenbankindexfeld - hier das Datenbankfeld eintragen, das für diese Tabelle die ID definiert
            $db_index="products_id";
            // Tabelle - hier die Tabelle eintragen
            $db_table="products_description";

            // inkludiere notwendige Datenbanklogik des Shops
            require_once('includes/application_top.php');
            // hole Tabelle aus Datenbank
            // SQL Code: Lese die beiden Spalten mit den Namen definiert in den Variablen $db_index und $db_field aus der Tabelle mit dem Namen definiert in der Variable $db_field
        $sql="SELECT " . $db_index . "," . $db_field . " FROM " . $db_table;
            // lasse die Datenbank den Befehl ausführen
        $result = xtc_db_query($sql);
            // Erzeuge ein Array für die Ausgabe der Datenbank
        $table_fields = Array();
            // Schleife über alle Ausgabeergebnisse der obigen Datenbankabfrage
        while($row = mysql_fetch_assoc($result)){
            // Füge das Array, das eine Zeile der Datenbankabfrage enthält an das Array $table_fields an.
                $table_fields[] = $row;
        }
        // Schleife über das Array $table_fields. Bei jedem Durchlauf seht in der Variable $table_field eine Zeile der SQL Abfrage zur verfügung
        foreach ($table_fields as $table_field) {
                            // definiere was in der Datenbank geändert werden soll
                            // die Variable muss einen Teil einer UPDATE SQL Anweisung enthalten
                $updatewhere = $db_index . " = '". (int)$table_field[$db_index] ."'";
                            // entferne alle Tags die nicht in $tags_allowed enthalten sind
                            // hier wird die eigentliche Arbeit erledigt. Das Entfernen der unerwünschten Tags
                            // wobei die Variable $tags_allowed alle tags enthält die vom Befehl strip_tags ignoriert werden sollen
                $data[$db_field] = strip_tags($table_field[$db_field],$tags_allowed);
                            // frage ab, ob das Ergebnis nach entfernen der tags ein anderes ist, als zuvor
                if (  $data[$db_field] !== $table_field[$db_field]) {
                                            // wenn das der Fall ist, schreibe in die Datenbank
                        xtc_db_perform($db_field,$data , 'update', $updatewhere);
                                            // und gebe auf dem Bildschirm aus für welche ID eine Änderung vorgenommen wurde
                        echo 'Text korregiert f&uuml;r ID: ' . $table_field[$db_index] . " in Tabelle" . $db_table . "<br />\n";
                }
        }

            ?>

    Und Deine Frage welches Feld das jetzt eigentlich ist, erübrigt sich bei einem Blick in die Wiki. Den Link habe ich auch noch mal mit in die Kommentarzeilen gepackt.

    Alex23

    • Fördermitglied
    • Beiträge: 197
    @Bonsai

    Da muss ich dir doch jetzt mal ein Kompliment machen. Super Anleitung und so ausführlich erklärt, daß es sogar ein Laie wie ich versteht!
    Ich habe mal dein 4. Script (Artikelbeschreibung) getestet und sehe nun bei mir ein kleines Problem, welches ich auch gern lösen möchte.

    vorher:
    <h1><font size="2" face="Verdana">Text Überschrift</font></h1>

    nachher (viel zu gross):
    <h1>Text Überschrift</h1>

    besser (richtige Grösse):
    <h3>Text Überschrift</h3>

    Kann man das denn auch mithilfe dieses Scripts lösen ohne jede Artikelbeschreibung manuell abzuändern?

    Gruß + danke,

    Alex23

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    direkt vor diese Zeile:
    Code: PHP  [Auswählen]
    $data[$db_field] = strip_tags($table_field[$db_field],$tags_allowed);
    diese Zeile:
    Code: PHP  [Auswählen]
    $data[$db_field] = str_replace(array("<h1>","</h1>"),array("<h3>","</h3>"),$data[$db_field]);

    Und nicht vergessen das h3 Tag in der Variable $tags_allowed einzutragen, sonst wird es komplett rausgeschmissen.

    Alex23

    • Fördermitglied
    • Beiträge: 197
    @Bonsai

    Sorry, funktioniert leider nicht!

    vorher:
    <h1><font size="2" face="Verdana">Text Überschrift</font></h1>

    nachher (ohne h3-Tag):
    Text Überschrift

    Das h3-Tag habe ich in der Variable $tags_allowed eingetragen.

    Gruß + danke,

    Alex23

    Alex23

    • Fördermitglied
    • Beiträge: 197
    @Bonsai

    Ich habe es nun hinbekommen. Allerdings muss es genau umgekehrt sein!

    direkt nach dieser Zeile:
       
    Code: PHP  [Auswählen]
    $data[$db_field] = strip_tags($table_field[$db_field],$tags_allowed);

    diese Zeile:
       
    Code: PHP  [Auswählen]
    $data[$db_field] = str_replace(array("<h1>","</h1>"),array("<h3>","</h3>"),$data[$db_field]);

    Und zusätzlich ausser dem h3 Tag auch das h1 Tag in der Variable $tags_allowed eintragen.

    Gruß + danke,

    Alex23

    Alex23

    • Fördermitglied
    • Beiträge: 197
    @Bonsai

    Ich habe leider noch ein kleines Problem gefunden, nachdem ich das 4. Script (Artikelbeschreibung) angewandt hatte, welches ich auch gern lösen möchte.

    <b>Hinweis-Text</b>

    ersetzen mit:

    <b><font color="#0099ff">Hinweis-Text</font></b>

    Kann man das denn auch mithilfe eines Scripts lösen ohne jede Artikelbeschreibung manuell abzuändern?

    Gruß + danke,

    Alex23

    web0null

    • Experte
    • Beiträge: 1.998
    Wenn du das wirklich im Text machen willst statt mit css, dann so:
    Code: PHP  [Auswählen]
    $data[$db_field] = str_replace(array('<b>','</b>'), array('<b><font color="#0099ff">','</font></b>'), $data[$db_field]);

    "<font>" natürlich in $tags_allowed aufnehmen.

    Gruß

    Alex23

    • Fördermitglied
    • Beiträge: 197
    @web0null

    OK, werde ich gleich mal ausprobieren.
    Wie würde das denn mit css aussehen?

    Gruß + danke,

    Alex23
    3 Antworten
    2776 Aufrufe
    30. Juli 2013, 21:38:44 von Fritzi
    1 Antworten
    2229 Aufrufe
    19. Februar 2014, 10:53:41 von noRiddle (revilonetz)
    6 Antworten
    3663 Aufrufe
    24. Mai 2010, 12:45:20 von koshiro
    3 Antworten
    2930 Aufrufe
    19. Januar 2013, 20:30:08 von rengermany
               
    anything