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: BETA MODUL: Individuelle Sonderangebotstexte pro Artikel - Mehrsprachig

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Ich hatte mal nach so einem Modul gefragt, auch angeboten bekommen, jedoch kam nach einer Rückfrage meinerseits keine Reaktion mehr. Ich habe es jetzt selbst geschrieben.

    Ein Feature das ich dringend vermisste und einer der ganz wenigen Punkte an denen unser früherer Shop modified überlegen war.

    Es geht darum, dass man bei einem Sonderangebot anstatt "Unser bisheriger Preis" einen individuellen Text vor den "alten" Preis stellen kann.
    Beispiel in einer Box:
    [ Für Gäste sind keine Dateianhänge sichtbar ]
    Beispiel auf der Produktdetailseite:
    [ Für Gäste sind keine Dateianhänge sichtbar ]
    Im Backend:
    [ Für Gäste sind keine Dateianhänge sichtbar ]

    Gebaut ist das Modul für 1.06 ohne SP, vermutlich geht es auch mit SP2

    Das Modul ist noch Beta!  :beta:

    Bekannter Bug: Beim bearbeiten eines Sonderangebotes wird der neue Text zwar gespeichert, aber wenn man erneut auf bearbeiten der Sonderpreise geht, bekommt man den alten Text vorausgewählt. Das hat irgendwas mit dem caching zu tun. Cache leeren, und der richtige Text ist vorausgewählt. Eventuell taucht der Bug auch nur bei mir auf, da verhält sich das caching sowieso seltsam.

    Fehlende Funktionalität:
    Eingeben neuer Texte ist derzeit nur über SQL Queries möglich.

    Kann das Modul bitte mal jemand in einen Testshop einbauen und berichten ob meine Anleitung fehlerfrei ist? Diese Anleitung ist parallel mitgeschrieben worden, eventuell Fehlt etwas oder ich habe einen gefundenen Bug in der Anleitung noch nicht korrigiert.

    Anleitung:
    1)
    SQL Befehle ausführen zum anlegen der neuen Tabelle specials_text und ändern der specials Tabelle:

    Code: SQL  [Auswählen]
    ALTER TABLE `specials` ADD `specials_text_id` INT(5) NOT NULL ;
    CREATE TABLE `specials_text` (
      `specials_text_id` INT(5) NOT NULL,
      `language_id` INT(5) NOT NULL,
      `specials_text` VARCHAR(50) COLLATE latin1_german1_ci NOT NULL,
      PRIMARY KEY (`specials_text_id`,`language_id`)
    );
     
    Neue Tabelle bekannt machen:
    includes/database_tables.php
    Suche
    Code: PHP  [Auswählen]
    define('TABLE_SPECIALS', 'specials');
     
    Füge dahinter ein:
    Code: PHP  [Auswählen]
    define('TABLE_SPECIALS_TEXT', 'specials_text');
     

    2)
    SQL Befehl zum herausfinden der richtigen Language ID(s)
    Code: SQL  [Auswählen]
    SELECT * FROM `languages`
     
    languages_id für alle genutzten Länder notieren, wir brauchen diese gleich

    suche in /lang/german/german.php (und allen weiteren genutzten Sprachen)
    Code: PHP  [Auswählen]
    define('INSTEAD',
     
    Den Text notieren der hier definiert ist, inklusive der Anführungszeichen!
    Beispiel deutsch
    'Unser bisheriger Preis '

    3)
    Den alten Standardtext einbauen, damit alle Artikel die keinen Sondertext haben, diesen alten Text weiterhin bekommen:
    SQL Befehl bauen für jede genutze Sprache nach diesem Beispiel (Standard deutsch). Bei Values als zweiten Wert die language_id und als dritten Wert den INSTEAD Text einfügen den wir gerade aus der /lang/german/german.php ausgelesen hatten.
    Leerzeichen am Ende der Texte nicht vergessen!
    Code: SQL  [Auswählen]
    INSERT INTO `specials_text` (`specials_text_id`,`language_id`,`specials_text`) VALUES (0,2,'Unser bisheriger Preis ');
     

    4)
    Jetzt für jeden weiteren Text der gewünscht wird, einen neuen Eintrag mit einer höheren specials_text_id einfügen.
    Beispiele:
    Code: SQL  [Auswählen]
    INSERT INTO `specials_text` (`specials_text_id`,`language_id`,`specials_text`) VALUES (1,2,'Früherer gebundener Ladenpreis ');
    INSERT INTO `specials_text` (`specials_text_id`,`language_id`,`specials_text`) VALUES (2,2,'Unverbindliche Preisempfehlung des Herstellers ');
    INSERT INTO `specials_text` (`specials_text_id`,`language_id`,`specials_text`) VALUES (3,2,'Preis der Originalausgabe ');
    INSERT INTO `specials_text` (`specials_text_id`,`language_id`,`specials_text`) VALUES (4,2,'Subsktiptionspreis für Vorbesteller! Danach ');
     

    5)
    Einbau der Abfrage
    Am Ende der includes/classes/xtcPrice.php
    Vor:
    Code: PHP  [Auswählen]
    }
    ?>
     
    Füge ein:
    Code: PHP  [Auswählen]
    //BOC - Bonsai - alternative special texts
    function productSpecialsText ($products_id) {
     $specials_text = array();
     $specials_text = xtc_db_fetch_array(xtDBquery( "SELECT " . TABLE_SPECIALS_TEXT . ".specials_text
                                                                                                                    FROM "
    . TABLE_SPECIALS_TEXT . " LEFT JOIN " . TABLE_SPECIALS . "
                                                                                                                    ON "
    . TABLE_SPECIALS_TEXT . ".specials_text_id = " . TABLE_SPECIALS . ".specials_text_id
                                                                                                                    WHERE "
    . TABLE_SPECIALS_TEXT . ".language_id = " . $_SESSION['languages_id'] . "
                                                                                                                    AND "
    . TABLE_SPECIALS . ".products_id = ".$products_id ));
     if (strtolower($_SESSION['language_charset']) !== 'utf-8') $specials_text['specials_text'] = htmlentities ($specials_text['specials_text'], ENT_QUOTES, strtoupper($_SESSION['language_charset']),false);
     return $specials_text['specials_text'];
    }
    //EOC - Bonsai - alternative special texts
     

    6)Einbau der Anzeige
    includes/classes/xtcPrice.php
    Finde
    Code: PHP  [Auswählen]
    $price = '<span class="productOldPrice"><small>' . INSTEAD . '</small><del>' . $this->xtcFormat($pPrice, $format) . '</del></span><br />' . ONLY . $this->checkAttributes($pID) . $this->xtcFormat($sPrice, $format) . '<br /><small>' . YOU_SAVE . round(($pPrice - $sPrice) / $pPrice * 100) . ' % /' . $this->xtcFormat($pPrice - $sPrice, $format);
     
    Ersetze mit:
    Code: PHP  [Auswählen]
    //BOC - Bonsai - alternative special texts
    $price = '<span class="productOldPrice"><small>' . $this->productSpecialsText($pID) . '</small><del>' . $this->xtcFormat($pPrice, $format) . '</del></span><br />' . ONLY . $this->checkAttributes($pID) . $this->xtcFormat($sPrice, $format) . '<br /><small>' . YOU_SAVE . round(($pPrice - $sPrice) / $pPrice * 100) . ' % /' . $this->xtcFormat($pPrice - $sPrice, $format);
    //EOC - Bonsai - alternative special texts
     

    Finde
    Code: PHP  [Auswählen]
    $price = '<span class="productOldPrice"><small>' . INSTEAD . '</small><del>' . $this->xtcFormat($pPrice, $format) . '</del></span><br />' . ONLY . $this->checkAttributes($pID) . $this->xtcFormat($sPrice, $format) . '<br /><small>' . YOU_SAVE . round($discount) . ' % /' . $this->xtcFormat($pPrice - $sPrice, $format) . '</small>';
     
    Ersetze mit
    Code: PHP  [Auswählen]
    //BOC - Bonsai - alternative special texts
    $price = '<span class="productOldPrice"><small>' . $this->productSpecialsText($pID) . '</small><del>' . $this->xtcFormat($pPrice, $format) . '</del></span><br />' . ONLY . $this->checkAttributes($pID) . $this->xtcFormat($sPrice, $format) . '<br /><small>' . YOU_SAVE . round($discount) . ' % /' . $this->xtcFormat($pPrice - $sPrice, $format) . '</small>';
    //BOC - Bonsai - alternative special texts
     

    7)
    Einbau der Editierfunktion im Backend
    /lang/german/admin/categories.php/categories_specials.php
    Füge am Ende vor dem abschließenden
    Code: PHP  [Auswählen]
    ?>
     
    das ein:
    Code: PHP  [Auswählen]
    //BOC - Bonsai - alternative special texts
    define('TEXT_SPECIALS_PRICE_TEXT','Text Sonderpreis');
    //EOC - Bonsai - alternative special texts
     

    /admin/includes/modules/categories_specials.php
    Finde
    Code: PHP  [Auswählen]
    require_once(DIR_FS_LANGUAGES . $_SESSION['language'] . '/admin/categories_specials.php');
     
    Füge dahinter ein:
    Code: PHP  [Auswählen]
    //BOC - Bonsai - alternative special texts
    $specials_text_array = xtc_db_fetch_array(xtc_db_query("SELECT  specials_text_id,
                                                                                                                                    specials_text
                                                                                                                                    FROM specials_text
                                                                                                                                    WHERE language_id = '"
    . (int)$_SESSION['languages_id']  . "' ORDER BY specials_text_id;"));
    $specials_text_input = array();
    foreach ($specials_text_array as $specials_text) {
            $specials_text_input[] = array( 'id'    => $specials_text['specials_text_id'],
                                                                            'text'  => $specials_text['specials_text']);
    }
    //EOC - Bonsai - alternative special texts
     

    Finde
    Code: PHP  [Auswählen]
    $specials_query = "SELECT p.products_tax_class_id,
                                                    p.products_id,
                                                    p.products_price,
                                                    pd.products_name,
                                                    s.specials_id,
                                                    s.specials_quantity,
                                                    s.specials_new_products_price,
                                                    s.specials_date_added,
                                                    s.specials_last_modified,
                                                    s.expires_date,
                                                    s.status
    Ersetze mit
    Code: PHP  [Auswählen]
    $specials_query = "SELECT p.products_tax_class_id,
                                                    p.products_id,
                                                    p.products_price,
                                                    pd.products_name,
                                                    s.specials_id,
                                                    s.specials_quantity,
                                                    s.specials_new_products_price,
                                                    s.specials_date_added,
                                                    s.specials_last_modified,
                                                    s.expires_date,
                                                    s.status,
                                                    s.specials_text_id

    Finde
    Code: PHP  [Auswählen]
    $price=$sInfo->products_price;
    $new_price=$sInfo->specials_new_products_price;
    $new_price_netto = ''; //web28 - 2010-07-27 - show special_price netto
     
    Füge dahinter ein
    Code: PHP  [Auswählen]
    //BOC - Bonsai - alternative special texts
    $specials_text_selected = $sInfo->specials_text_id;
    //EOC - Bonsai - alternative special texts
     

    Finde
    Code: PHP  [Auswählen]
            &nbsp;
            <?php if(isset($_GET['pID']) and xtc_db_num_rows($specials_query, true) > 0) { ?>
            <input type="checkbox" name="specials_status" value="1" id="input_specials_status"  style="vertical-align:middle;" <?php echo $status;?>/><label for="input_specials_status">&nbsp;<?php echo TEXT_EDIT_STATUS; ?></label>
            <?php } ?>
      </td>
    </tr>
     

    Füge dahinter ein:
    Code: PHP  [Auswählen]
    <tr>
      <td class="main"><?php echo TEXT_SPECIALS_PRICE_TEXT; ?>:&nbsp;</td>
      <td class="main"><?php echo xtc_draw_pull_down_menu('text_special_price_text',$specials_text_input,$specials_text_selected); ?></td>
      <td class="main">&nbsp;</td>
    </tr>
     

    Finde
    Code: PHP  [Auswählen]
    $sql_data_array = array('products_id' => $products_id,
                                                    'specials_quantity' => (int)$_POST['specials_quantity'],
                                                    'specials_new_products_price' => xtc_db_prepare_input($_POST['specials_price']),
                                                    'specials_date_added' => 'now()',
                                                    'expires_date' => $expires_date,
                                                    'status' => '1'
                                                    );
     
    Ersetze mit
    Code: PHP  [Auswählen]
    //BOC - Bonsai - alternative special texts
    $sql_data_array = array('products_id' => $products_id,
                                                    'specials_quantity' => (int)$_POST['specials_quantity'],
                                                    'specials_new_products_price' => xtc_db_prepare_input($_POST['specials_price']),
                                                    'specials_date_added' => 'now()',
                                                    'expires_date' => $expires_date,
                                                    'status' => '1',
                                                    'specials_text_id' => (int)$_POST['text_special_price_text']
                                                    );
    //EOC - Bonsai - alternative special texts
     

    Finde
    Code: PHP  [Auswählen]
    $sql_data_array = array(
                                      'specials_quantity' => (int)$_POST['specials_quantity'],
                                      'specials_new_products_price' => xtc_db_prepare_input($_POST['specials_price']),
                                      'specials_date_added' => 'now()',
                                      'expires_date' => $expires_date,
                                      'status' => (int)$_POST['specials_status']
                                      );
     
    Ersetze mit
    Code: PHP  [Auswählen]
        //BOC - Bonsai - alternative special texts
        $sql_data_array = array(
                          'specials_quantity' => (int)$_POST['specials_quantity'],
                          'specials_new_products_price' => xtc_db_prepare_input($_POST['specials_price']),
                          'specials_date_added' => 'now()',
                          'expires_date' => $expires_date,
                          'status' => (int)$_POST['specials_status'],
                                              'specials_text_id' => (int)$_POST['text_special_price_text']
                          );
            //EOC - Bonsai - alternative special texts
     

    [EDIT Tomcraft 05.02.2015: Fehler in Anleitung korrigiert.]

    Linkback: https://www.modified-shop.org/forum/index.php?topic=32201.0

    web0null

    • Experte
    • Beiträge: 1.998
    Erst mal Danke fürs bereitstellen.

    Schau dir mal Punkt 5 an, da ist ein Fehler, dort gehört die Methode "productSpecialsText" hin.
    Ich würde die Anleitung in eine Datei auslagern, damit es bei Änderungen besser aktualisiert werden kann.

    Gruß

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    :oops: :doh: Danke für den Hinweis!

    Ich muss die Anleitung wirklich auslagern. Wollte auch eine Version erstellen mit geänderten Dateien, so dass man im Originalshop einfach die Dateien drüber kopieren kann. Aus Zeitmangel geht das gerade nicht.

    Da ich die Anleitung direkt in BB code geschrieben habe, dauert das noch bis eine HTML Version davon kommt.

    Erstmal die korrigierte Version.

    [EDIT Tomcraft 05.02.2015: Anleitung in Beitrag 1 korrigiert.]

    web0null

    • Experte
    • Beiträge: 1.998
    Für deine spätere Anleitung:
    Punkt 6 würde doch z. B. reichen...

    suche: INSTEAD
    ersetze: $this->productSpecialsText($pID)

    genauso wie z. B.,
    suche:
    s.expires_date,
    s.status

    ersetze:
    s.expires_date,
    s.status,
    s.specials_text_id

    Ist nur als Anregung gedacht (ich halte solche Sachen immer so kurz wie möglich, ist aber nur meine Meinung).

    Gruß
    216 Antworten
    95658 Aufrufe
    03. Dezember 2019, 17:30:48 von 0815
    1 Antworten
    1541 Aufrufe
    29. November 2016, 23:24:27 von hpzeller
    7 Antworten
    4403 Aufrufe
    30. November 2011, 08:27:31 von as-racing
    29 Antworten
    19421 Aufrufe
    20. Mai 2012, 10:39:10 von Schreinermeister
               
    anything