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!
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:
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
define('TABLE_SPECIALS', 'specials'); Füge dahinter ein:
define('TABLE_SPECIALS_TEXT', 'specials_text'); 2)
SQL Befehl zum herausfinden der richtigen Language ID(s)
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)
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!
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:
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:
}
?>
Füge ein:
//BOC - Bonsai - alternative special textsfunction 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
$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:
//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
$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
//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
?>
das ein:
//BOC - Bonsai - alternative special textsdefine('TEXT_SPECIALS_PRICE_TEXT','Text Sonderpreis');//EOC - Bonsai - alternative special texts /admin/includes/modules/categories_specials.php
Finde
require_once(DIR_FS_LANGUAGES . $_SESSION['language'] . '/admin/categories_specials.php');
Füge dahinter ein:
//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
$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
$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
$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
//BOC - Bonsai - alternative special texts
$specials_text_selected = $sInfo->specials_text_id;
//EOC - Bonsai - alternative special texts
Finde
<?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">
<?php echo TEXT_EDIT_STATUS
; ?></label>
<?php } ?> </td>
</tr>
Füge dahinter ein:
<tr>
<td class="main"><?php echo TEXT_SPECIALS_PRICE_TEXT; ?>: </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"> </td>
</tr>
Finde
$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
//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
$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
//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