Freitag, 18. april 2008

dem Einen oder Anderen ist es vielleicht schon aufgefallen, das für die Advanced Search Results Seite unter Umständen ein Template gewählt wird, daß eigentlich so nicht gedacht war, und das man es auch nicht im Admin einstellen kann, welches Template denn gewählt werden soll.

Die entsprechende Anweisung im original XTC code "wählt" nämlich einfach die "erste" Template-Datei im ordner templates/IhrTemplate/module/product_listing aus.


PHP-Code:
// get default template
if ($category['listing_template'] == '' or $category['listing_template'] == 'default') {
$files = array ();
if ($dir = opendir(DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/module/product_listing/')) {
while (($file = readdir($dir)) !== false) {
if (is_file(DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/module/product_listing/'.$file) and ($file != "index.html") and (substr($file, 0, 1) !=".")) {
$files[] = array ('id' => $file, 'text' => $file);
} //if
} // while
closedir($dir);
}
$category['listing_template'] = $files[0]['id'];
}


das ist natürlich eine suboptimale Lösung, da man damit recht unflexibel ist.
deshalb habe ich mich mal schnell hingesetzt und eine Lösung gesucht, um das Suchergebnis-Template vom Admin-Bereich aus einstellbar zu machen.

Das Ergebnis ist einfach umzusetzten, daher an dieser Stelle kein Download sondern eine Anleitung.

1. SQL QUERY ausführen:
SQL-Code:
INSERT INTO configuration SET configuration_key="DEFAULT_SEARCH_TEMPLATE", configurationvalue="", configuration_group_id=22, sort_order=30,set_function="xtc_cfg_pull_template_selector(";

2. den codeblock
PHP-Code:
// get default template
if ($category['listing_template'] == '' or $category['listing_template'] == 'default') {
$files = array ();
if ($dir = opendir(DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/module/product_listing/')) {
while (($file = readdir($dir)) !== false) {
if (is_file(DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/module/product_listing/'.$file) and ($file != "index.html") and (substr($file, 0, 1) !=".")) {
$files[] = array ('id' => $file, 'text' => $file);
} //if
} // while
closedir($dir);
}
$category['listing_template'] = $files[0]['id'];
}
in includes/modules/product_listing.php gegen
PHP-Code:
if ($category['listing_template'] == '' or $category['listing_template'] == 'default') {
$category['listing_template'] = DEFAULT_SEARCH_TEMPLATE;
}
austauschen

3. in lang/german/admin/german.php
PHP-Code:
define('DEFAULT_SEARCH_TEMPLATE_TITLE','Standard Suchergebnis-Template');
define('DEFAULT_SEARCH_TEMPLATE_DESC','Standard Suchergebnis-Template');
einfügen


4. in admin/includes/application_top.php
PHP-Code:
function xtc_cfg_pull_template_selector(){
$files = array ();
if ($dir = opendir(DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/module/product_listing/')) {
while (($file = readdir($dir)) !== false) {
if (is_file(DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/module/product_listing/'.$file) and ($file != "index.html") and (substr($file, 0, 1) !=".")) {
$files[] = array ('id' => $file, 'text' => $file);
} //if
} // while
closedir($dir);
}
$ret='<select name="DEFAULT_SEARCH_TEMPLATE">
<option value="'.$file['id'].'">'.$file['id'].'</option></select>';

return $ret;
}
einfügen (vor
PHP-Code:
    // Include Template Engine
require(DIR_FS_CATALOG.DIR_WS_CLASSES . 'Smarty_2.6.14/Smarty.class.php');
).

Das wars schon, jetzt könnt Ihr im Admin-Bereich unter Such-Optionen das Template für die Suchergebnisseite festlegen.

Ich hoffe es nützt dem einen oder anderen
von SMT-WebServices veröffentlicht in: about:xt:Commerce
Kommentar hinzufügen Kommentare (0)    empfehlen
Mittwoch, 26. märz 2008
Was lange währt wird endlich gut:
Das Modul Ersatzteil-Manager ist fertig gestellt.

Der Ersatzteil-Manager ist ein xt:commerce Modul mit dem Sie Ihren Kunden ein mächtiges Suchwerkzeug zur Verfügung stellen können, das den Kunden über Die Geräteart, den Herstelle, den Typ und letztendlich die Seriennummer zu den für sein Gerät passenden Ersatzteilen (und/oder Zubehörteilen) führt.
Dies geschieht einfach über 4 nach und nach eingeblendete Dropdown Felder. Ist das letzte Feld (Seriennummer) ausgewählt wird dem Kunden eine umfangreich einstellbare Suchergebnisseite angezeigt, die alle passenden Artikel nach Baugruppen sortiert ausgibt.
Der Kunde kann direkt von dieser Ansicht die Artikel in den Warenkorb legen. (Er bleibt auf der Suchergebnisseite)
Zur Gestaltung der Informationsdichte der Suchergebnisseite stehen Ihnen zu JEDEM aufgelisteten Artikel ALLE zugänglichen Informationen zur Verfügung.

Das Backend ist komfortabel und durchdacht, so können Sie zum Beispiel wenn einmal die Grundkonfiguration gegeben ist beim Anlegen neuer Ersatzteile diese direkt aus der Artikel bearbeiten Ansicht Ihres Admin-Interfaces heraus in den ET-Manager einbinden, Ihnen Seriennummern zuweisen etc.
Sie können ebenso wenn Sie die Geräte (Vaterprodukte) ebenfalls führen diese mit den Ersatzteilen verknüpfen, so das der Kunde wenn er ein Vaterprodukt im Shop betrachtet eine Auflistung der Seriennummern(bereiche) sieht die jeweils als Link gestaltet sind und zur Ersatzteil Suchergebnisseite führen.

Im Backend können diese Zuweisungen auch nachträglich erfolgen, wenn Sie zum Beispiel für ein Vaterprodukt schon länger Ersatzteile führen und diese entsprechend im ET-Manager angelegt und zugewiesen haben, können Sie später, wenn Sie auch das Vaterprodukt als Verkaufsprodukt einführen ganz einfach diese Zuweisungen auf das nun vorhandene Shopprodukt übertragen.

Einen Shop der dieses Modul bereits einsetzt finden Sie unter :www.rd-automobile.de


Einen reinen DemoShop, finden Sie unter: Demoshop

Die Admin-Login-Daten für den Demoshop lauten demo@admin.de  passwort: test1234

Der Shop enthält übrigends auch eine Demo zu dem in diesem Artikel beschriebenem Modul.
Leider ist dieser Demo Shop nicht Immer zugänglich, also bei Nichterreichbarkeit (meist Nachts und Vormittags) einfach später noch einmal probieren.

Das Modul wird mit einem automatischen Installer und UnInstaller geliefert.


von SMT-WebServices veröffentlicht in: about:xt:Commerce
Kommentar hinzufügen Kommentare (0)    empfehlen
Dienstag, 25. märz 2008
So, nachdem das Thema ja grad recht aktuell zu sein scheint, und auch n Kollege sowas mal schnell gebraucht hat hab  ich mir mal die JCarousel Class von http://sorgalla.com/jcarousel/ gekrallt und ne xt:commerce Box draus gestrickt.
JSLICER_BACK-Kopie-1.png


Fast alle Parameter die die JS Classe hergibt sind in diesem Mini Modul vom Backend aus konfigurierbar, ebenso die relevanten CSS Paramter.

Des weiteren kann eingestellt werden, welche Artikel angezeigt werden sollen: Categorie, Specials oder Zufällig.
Bei Categorie und Specials ist als Rückfalloption Random fest eingestellt (wenn z.B. keine Kathegorie gewählt ist, oder alle Specials ausgelaufen sind)

Frontend:  als box: Abb1         
                    im Content: Abb2                                                                                                                                 Abb1:
fe1-Kopie-1.png

Edit 12.April 2008:

Endlich bin ich dazu gekommen die verbesserte Version zu vervollständigen.
Sie kommt mit einer herkömmlichen Installationsanleitung und nicht mit dem automatischen Installer.
hier herunterladen

Abb2:
fe2.png










Ein Link zu einem Demoshop zum Testen findet sich in diesem Beitrag


von SMT-WebServices veröffentlicht in: about:xt:Commerce
Kommentar hinzufügen Kommentare (14)    empfehlen
Mittwoch, 5. märz 2008
ich hab den "Kunden die diesen Artikel gekauft haben...." Bereich mal in ne eigenen Box ausgelagert, so das man ihn  eben nicht mehr zwingend unter der Artikelbeschreibung  haben muss.

Download

also_purchased.php gehört in templates/DeinTemplate/source/boxes
box_also_purchased.html gehört in templates/DeinTemplate/boxes

dann noch in templates/DeinTemplate/boxes.php
folgendes einfügen:

php-code:



include(DIR_WS_BOXES . 'also_purchased.php');

und in den language files im bereich boxes einen eintrag

und in die templates/deinTemplate/index.html folgenden eintrag an der gewünschten Position

php-code:



{$box_ALSO_PURCHASED}

heading_also_purchased mit der gewünschten überschrift erzeugen...

done.

ich hoffe es hilft

p.s die php datei is ne adaption auf das originale modul also purchased der ansatz könnte also problemlos auch für cross selling und oder reverse cross selling umgesetzt werden.

edit:
mir is grad noch n kleiner fehler aufgefallen...
in der also_purchased.php gehört folgende zeile noch auskommentiert oder gelöscht:
print_r($_REQUEST);

noch n edit:
nachdem ich freundlich darum gebeten wurde weise ich an dieser Stelle darauf hin, das diese Box keine FSK 18 Abfrage hat: (geänderte Version kommt wenn ich ma wieder ne ruhige Minute hab des mit rein zu stricken)
von SMT-WebServices veröffentlicht in: about:xt:Commerce
Kommentar hinzufügen Kommentare (0)    empfehlen
Dienstag, 26. februar 2008
Die Kategorienamen sind zu lang für das Navigationsmenü und zerreissen das Template?

Dem kann abgeholfen werden:

diese modifizierte  templates/dein Template/source/boxes/categories.php wurde um eine Funktion "truncate_string" erweitert, die es ermöglicht anhand einer einzelnen Variable die maximale Länge für die Namen festzulegen. Ist ein Kategoriename länger, so wird er an der entsprechenden Position abgeschnitten und es werden 3 Punkte angehängt.
Also zum Beispiel die Kategorie heißt "Zubehör für dieses und jenes Gerät" und Sie definieren die maximale Länge auf 20 Zeichen so ergibt das dann: "Zubehör für dieses u..."

Das mag nicht für jeden eine optimale Lösung darstellen, aber der eine oder andere soll sowas schon benötigt haben ;-)

templates/dein Template/source/boxes/categories.php
php-code:
<?php

/* -----------------------------------------------------------------------------------------
$Id: categories.php 1302 2005-10-12 16:21:29Z mz $

XT-Commerce - community made shopping
http://www.xt-commerce.com

Copyright (c) 2003 XT-Commerce
-----------------------------------------------------------------------------------------
based on:
(c) 2000-2001 The Exchange Project (earlier name of osCommerce)
(c) 2002-2003 osCommerce(categories.php,v 1.23 2002/11/12); www.oscommerce.com
(c) 2003 nextcommerce (categories.php,v 1.10 2003/08/17); www.nextcommerce.org

Released under the GNU General Public License
-----------------------------------------------------------------------------------------
Third Party contributions:
Enable_Disable_Categories 1.3 Autor: Mikel Williams | mikel@ladykatcostumes.com

Released under the GNU General Public License

truncate Names: Autor: Tordt Schmidt | info@smt-webservices.de
---------------------------------------------------------------------------------------*/
//Define maximum Category name Length (set 0 for unprocessed strings)
$maxLength=7;

function truncate_names($string, $max_length){
if (max_length!=0){
if (strlen($string) > $max_length) {
$string = substr($string,0,$max_length);
$string .= '...';
}
}
return $string;
}

// reset var
$start = microtime();
$box_smarty = new smarty;
$box_content = '';

$box_smarty->assign('language', $_SESSION['language']);
// set cache ID
if (!CacheCheck()) {
$cache=false;
$box_smarty->caching = 0;
} else {
$cache=true;
$box_smarty->caching = 1;
$box_smarty->cache_lifetime = CACHE_LIFETIME;
$box_smarty->cache_modified_check = CACHE_CHECK;
$cache_id = $_SESSION['language'].$_SESSION['customers_status']['customers_status_id'].$cPath;
}

if(!$box_smarty->is_cached(CURRENT_TEMPLATE.'/boxes/box_categories.html', $cache_id) || !$cache){

$box_smarty->assign('tpl_path', 'templates/'.CURRENT_TEMPLATE.'/');

// include needed functions
require_once (DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/source/inc/xtc_show_category.inc.php');
require_once (DIR_FS_INC.'xtc_has_category_subcategories.inc.php');
require_once (DIR_FS_INC.'xtc_count_products_in_category.inc.php');


$categories_string = '';
if (GROUP_CHECK == 'true') {
$group_check = "and c.group_permission_".$_SESSION['customers_status']['customers_status_id']."=1 ";
}
$categories_query = "select c.categories_id,
cd.categories_name,
c.parent_id from ".TABLE_CATEGORIES." c, ".TABLE_CATEGORIES_DESCRIPTION." cd
where c.categories_status = '1'
and c.parent_id = '0'
".$group_check."
and c.categories_id = cd.categories_id
and cd.language_id='".(int) $_SESSION['languages_id']."'
order by sort_order, cd.categories_name";
$categories_query = xtDBquery($categories_query);

while ($categories = xtc_db_fetch_array($categories_query, true)) {
$foo[$categories['categories_id']] = array ('name' => truncate_names($categories['categories_name'],$maxLength), 'parent' => $categories['parent_id'], 'level' => 0, 'path' => $categories['categories_id'], 'next_id' => false);

if (isset ($prev_id)) {
$foo[$prev_id]['next_id'] = $categories['categories_id'];
}

$prev_id = $categories['categories_id'];

if (!isset ($first_element)) {
$first_element = $categories['categories_id'];
}
}

//------------------------
if ($cPath) {
$new_path = '';
$id = split('_', $cPath);
reset($id);
while (list ($key, $value) = each($id)) {
unset ($prev_id);
unset ($first_id);
$categories_query = "select c.categories_id, cd.categories_name, c.parent_id from ".TABLE_CATEGORIES." c, ".TABLE_CATEGORIES_DESCRIPTION." cd where c.categories_status = '1' and c.parent_id = '".$value."' ".$group_check." and c.categories_id = cd.categories_id and cd.language_id='".$_SESSION['languages_id']."' order by sort_order, cd.categories_name";
$categories_query = xtDBquery($categories_query);
$category_check = xtc_db_num_rows($categories_query, true);
if ($category_check > 0) {
$new_path .= $value;
while ($row = xtc_db_fetch_array($categories_query, true)) {
$foo[$row['categories_id']] = array ('name' => truncate_names($row['categories_name'],$maxLength), 'parent' => $row['parent_id'], 'level' => $key +1, 'path' => $new_path.'_'.$row['categories_id'], 'next_id' => false);

if (isset ($prev_id)) {
$foo[$prev_id]['next_id'] = $row['categories_id'];
}

$prev_id = $row['categories_id'];

if (!isset ($first_id)) {
$first_id = $row['categories_id'];
}

$last_id = $row['categories_id'];
}
$foo[$last_id]['next_id'] = $foo[$value]['next_id'];
$foo[$value]['next_id'] = $first_id;
$new_path .= '_';
} else {
break;
}
}
}

xtc_show_category($first_element);

$box_smarty->assign('BOX_CONTENT', $categories_string);

}

// set cache ID
if (!$cache) {
$box_categories = $box_smarty->fetch(CURRENT_TEMPLATE.'/boxes/box_categories.html');
} else {
$box_categories = $box_smarty->fetch(CURRENT_TEMPLATE.'/boxes/box_categories.html', $cache_id);
}

$smarty->assign('box_CATEGORIES', $box_categories);
?>
von SMT-WebServices veröffentlicht in: about:xt:Commerce
Kommentar hinzufügen Kommentare (0)    empfehlen
Dienstag, 26. februar 2008
liveFind ist eine fehlertolerante live Suche die auf dem AJAX Framework basiert.

Der User benötigt in seinem Browser keinerlei zusätzlichen Plugins um sie nutzen zu
können, Javascript genügt. liveFind liefert dem User, basierend auf dessen Eingabe eine einstellbare Menge analternativen Suchbegriffen, sowie eine ebenfalls einstellbare Menge an direkten Suchtreffern.

Das Modul beinhaltet einen übersichtlichen Administrationsbereich, der weitreichende Einstellungen der Suchtechnik, sowie des Designs ermöglicht.


Das Modul kann hier für nur 69,-- käuflich erworben werden.
von SMT-WebServices veröffentlicht in: about:OSCommerce
Kommentar hinzufügen Kommentare (0)    empfehlen
Dienstag, 26. februar 2008
Dieses schlanke Shopmodul erstellt und aktualisiert eine nach den Google-Standards für XML – Sitemaps gültige Sitemap, und meldet deren Existenz bzw. Update an den Googlebot.
Aufgelistet werden in dieser Sitemap folgende Bereiche Ihres Shops:

  • Kategorien
  • Artikel
  • Content (AGB, Datenschutzerklärung, Versandkosteninformation, etc.

Um dieses Modul möglichst erfolgreich einzusetzen ist es sinnvoll einen Google-Webmaster Account zu besitzen, jedoch nicht zwingend erforderlich.

Gerade für neue oder häufig aktualisierte Shops ist dies ein wertvolles Werkzeug, um schnell und effektiv gefunden zu werden. Das Modul übernimmt auch die URL-Spezifikationen des xt-originalen Moduls "Suchmaschinenfreundliche URLs".
Die Erfahrung mit einem neu aufgesetzten Shop auf einer neuen Domain haben gezeigt, das bereits nach 2 Wochen von den zum Testzeitpunkt 60 Artikeln des Shops 40 gut bei Google gefunden wurden.
(Der Shop bewegt sich im nicht ganz unumkämpften Markt hochwertiger Küchengeräte)

Wir geben keine unrealistischen Versprechen damit auf Platz eins bei Google zu kommen, aber sie kommen einer guten Positionierung einfach, schnell und zuverlässig einen Schritt näher.

Das Modul kann hier für nur 69,--€ käuflich erworben werden.

edit: der Sitemapper liegt jetzt auch in einer Version vor, die DirectURL von bluegate verarbeiten kann.
(Bitte mit angeben wenn dies benötigt wird)
von SMT-WebServices veröffentlicht in: about:xt:Commerce
Kommentar hinzufügen Kommentare (0)    empfehlen
Dienstag, 26. februar 2008
Das Lizenz-System für das nicht mehr ganz neue Modul "Auvito Lister für xt:commerce"  wurde erweitert.

Die kostenlose Demoversion wurde von 2 Wochen auf 2 Monate verlängert, allerdings auf das Listen von 50 Artikeln begrenzt (alle anderen Funktionen sind uneingeschränkt nutzbar innerhalb dieser 2 Monate)

Das neue Lizenzmodell im Detail:
Zeit-Lizenzen (klassisch)
Lizenz Dauer Artikelbegrenzung Preis
Time1 1 Jahr unbegrenzt 239,--€
Time05 1/2 Jahr unbegrenzt 135,--€
Volumen-Lizenzen (neu)
Lizenz Dauer Artikelbegrenzung Preis
Light1000 1 Jahr 1000 39,95€
Light2000 1 Jahr 2000 69,95€
Light5000 1 Jahr 5000 95,95€
Der Lister kann hier heruntergeladen werden.
von SMT-WebServices veröffentlicht in: about:xt:Commerce
Kommentar hinzufügen Kommentare (0)    empfehlen
Dienstag, 26. februar 2008
Vielfach sieht man in verschiedenen Shops, das Login-Felder mit Werten ala "Username eingeben" und/oder  "Passwort eingeben" vorbelegt sind, die verschwinden wenn man in das entsprechende Feld klickt.

Der folgende Code bewerkstelligt genau dieses:

php-code:
//vorbefülltes email-feld
$box_smarty->assign('FIELD_EMAIL', xtc_draw_input_field('email_address', 'email adresse eingeben', 'size="25" maxlength="50" onclick="this.value=this.value.replace('email adresse eingeben','')"'));
//vorbefülltes passwort feld (klartext, wird onclick zu einem echten passswortfeld mit den bekannten sternchen '*')
$box_smarty->assign('FIELD_PWD', xtc_draw_input_field('password', 'Passwort eingeben', 'size="10" maxlength="30" onclick="this.value=this.value.replace('Passwort eingeben',''); this.type='password'"'));

zu ersetzen sind damit folgende Zeilen:
php-code:
$box_smarty->assign('FIELD_EMAIL', xtc_draw_input_field('email_address', '', 'size="25" maxlength="50"'));
        $box_smarty->assign('FIELD_PWD', xtc_draw_password_field('password', '', 'size="10" maxlength="30"'));

in der Datei: templates/dein Template/source/boxes/loginbox.php Ich hoffe das hilft dem einen oder anderen seinen Shop ein wenig zu personalisieren
von SMT-WebServices veröffentlicht in: about:xt:Commerce
Kommentar hinzufügen Kommentare (5)    empfehlen
Dienstag, 26. februar 2008
So, als erstes mal das übliche Bla-Bla:
also ich will hier, wenn meine Zeit es zulässt immer mal wieder den einen oder anderen Tip aus meiner Tätigkeit als Modulentwickler für Ecommerce Systeme bereitstellen und hoffe so dem einen oder anderen ein wenig Hilfestellung zu bieten.

Und natürlich werde ich, da ich ja schließlich meine Brötchen damit verdiene hier auch hin und wieder das eine oder andere Modul  vorstellen.

Codeschnipsel die hier bereitgestellt sind stehen grundsätzlich unter GPL, fühlt euch also frei sie zu verwenden, modifizieren oder weiterzureichen, aber denkt an die Autorenvermerke.

Module die hier vorgestellt werden, werden jeweils mit einem Link (falls verfügbar) versehen, unter dem ein Erwerb möglich ist.
von SMT-WebServices veröffentlicht in: about:blog
Kommentar hinzufügen Kommentare (0)    empfehlen

about:blog

about:search

about:archive

about:profile

  • : SMT-WebServices
  • smt-webservices
  • : männlich
  • : 14/12/1977

about:Site

Erstellen Sie einen Blog auf de.over-blog.com - Kontakt - Nutzungsbedingungen - Werbung - Missbrauch melden