Beiträge zu “xtcmodified”

xtcmodified Adressen zu DHL Intraship exportieren

Zum aktuellen Zeitpunkt gibt es leider keine vollständig automatisierte Schnittstelle vom Shopsystem xtcmodified zu der DHL Intrashipanwendung. Auf Basis eines anderen Adressenexportmoduls (dessen Quelle ich nicht mehr finde) habe ich folgenden Ablauf entwickelt.

Im Shopsystem werden immer eine feste Anzahl (bei mir 100) der letzten Adressen in eine CSV exportiert. Diese CSV Datei kann dann in der DHL Anwendung in das Adressbuch importiert werden. Wichtig ist dabei, dass die alten Adressen überschrieben werden und das Dateiformat "Standard CSV" ausgewählt ist. Jetzt können die Adressen beim Anlegen eines neuen Auftrages ausgewählt werden.

Folgende manuelle Arbeiten sind noch notwendig

  • Die Hausnummer muss manuell in das Feld Hausnummer eingetragen werden. xtcmodified legt die Hausnummer mit der Straße ab und so werden diese dann auch importiert.
  • Im Match Code wird die Auftragsnummer eingetragen. Diese kann mit Cut&Paste in den Sendungsdaten in das Feld Sendungsreferenz eingetragen werden.

Diese Variante ist nicht perfekt aber ich kenne zumindestens einen der sehr zufrieden damit ist :-)

intranet-dhl-export.pngFolgende Einschränkungen gelten:

  • Die Firmennamen müssen manuell nachgetragen. Da wir hauptsächlich an Endkundenversenden ist das Feld Firmenname mit dem Kontakt vorbelegt. Bei DHL ist das Feld "Firma" ein Pflichtfeld.
  • Anzahl der Adressen ist nicht konfigurierbar sondern steht in der PHP Datei drin.

Folgende Änderungen sind notwendig

  1. Eintragen des neuen Menueintrages in der Tabelle admin_access
  2. Aufnehmen des neuen Befehls im Adminbereich
  3. Die eigentliche Datei selbst

1. Eintragen des neuen Menueintrages in der Tabelle admin_access

mysql -u shop_admin -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.

mysql> use shop;
Reading table information for completion of table and column names

Database changed
mysql> ALTER TABLE admin_access ADD order_export TINYINT(1);
Query OK, 3 rows affected (0.07 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> UPDATE admin_access SET order_export=1 WHERE customers_id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

2. Aufnehmen des neuen Befehls im Adminbereich

lang/german/admin/german.php
===================================================================

 define('BOX_MODULE_EXPORT','XT-Module');
+define('BOX_ORDERS_EXPORT','DHL Adressen Download');
define('BOX_HEADING_GV_ADMIN', 'Gutscheine/Coupons');

admin/includes/column_left.php
===================================================================
   }
// EOF - Tomcraft - 2009-11-02 - set global customers-group-permissions
   if (($_SESSION['customers_status']['customers_status_id'] == '0') && ($admin_access['orders'] == '1')) echo '<li><a href="' . xtc_href_link(FILENAME_ORDERS, '', 'NONSSL') . '" class="menuBoxContentLink1"> -' . BOX_ORDERS . '</a></li>';
+  if (($_SESSION['customers_status']['customers_status_id'] == '0') && ($admin_access['order_export'] == '1')) echo '<li><a href="' . xtc_href_link('order_export.php', '', 'NONSSL') . '" class="menuBoxContentLink1"> -' . BOX_ORDERS_EXPORT . '</a></li>';
echo ('</ul>');

3. Die eigentliche Datei selbst

Die neue datei  admin/order_export.php

<?php
include('includes/application_top.php');
$res=xtc_db_query('SELECT NOW() as time');
$row=mysql_fetch_assoc($res);
$now=$row['time'];
$sql="
SELECT
    orders.orders_id as FortlaufendeNummer,
    orders.delivery_name as Firma,
    orders.delivery_street_address as Strasse,
    CONCAT('') as Hausnummer,
    orders.delivery_postcode as PLZ,
    orders.delivery_city as Ort,
    orders.delivery_country  as Land,
    CONCAT('') as Firma2,
    CONCAT('') as Firma3,
    orders.orders_id as Matchcode,
    CONCAT('') as Telefonnummer,
    CONCAT('') as Fax,
    orders.customers_email_address as Email,
    CONCAT('') as USTID,
    CONCAT('') as Kontakt,
    CONCAT('') as AddrZusatz
FROM orders_total total1
    LEFT JOIN orders_total total2
        ON total1.orders_id = total2.orders_id AND total2.class = 'ot_cod_fee'
    JOIN orders
        ON orders.orders_id = total1.orders_id
    JOIN orders_status
        ON orders.orders_status = orders_status.orders_status_id
    WHERE total1.class = 'ot_shipping'
    ORDER BY orders.orders_id desc;
        ";
$result=xtc_db_query($sql);
$i=0;
while(($row = mysql_fetch_assoc($result))&&($i<100)){
$inhalt.='"'.implode('";"',$row)."\"\r\n";
$i++;
}
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=orders_export.csv");
echo $inhalt;

 

10.3.12
Weitere Beiträge zu: xtcmodified  

xtcModified: Timeout in der xtc_get_parent_categories

Folgenden Fehler konnte ich beobachten wenn in einem Shop nach Produkten gesucht wurde.

Fatal error: Maximum execution time of 30 seconds exceeded in /var/www/html/inc/xtc_get_parent_categories.inc.php

Es konnten zwei Produkte identifiziert werden, die ich nicht gelöscht werden konnten und bei denen ebenfalls der Timeout Fehler auftauchte. Über einige SQL Befehle und diese Dokumente bin ich dann darauf gekommen das zwei Kategorien sich gegenseitig als Parent haben.

select categories_id,parent_id from categories where parent_id=52;
+---------------+-----------+
| categories_id | parent_id |
+---------------+-----------+
|           195 |      52   |
+---------------+-----------+
1 row in set (0.00 sec)

mysql> select categories_id,parent_id from categories where parent_id=195;
+---------------+-----------+
| categories_id | parent_id |
+---------------+-----------+
|            52 |       195 |
+---------------+-----------+
1 row in set (0.01 sec)

Wenn ich diese beiden Kategorien löschen, dann ist gut ;-)

delete from categories where categories_id=52;
delete from categories where categories_id=195;

Jetzt müssen noch die Produkte gelöscht werden die in der falschen Kategorie gehangen haben. Die Produkt IDs habe ich mir so geholt.

mysql> select * from products_to_categories where categories_id=52;
+-------------+---------------+
| products_id | categories_id |
+-------------+---------------+
|         114 |            52 |
|         ... |            52 |
|         ... |            52 |  
+-------------+---------------+

Das waren nur eine Handvoll von Produkten die dann mit Kategorie ID und Produkt ID über den Adminbereich des Shops gelöscht wurden.

Irgendwann muss da mal bei einer Umhängeaktionen etwas schief gelaufen sein. Die betroffenen Kategorien waren nicht mehr sichtbar da sei keine Verbindung "nach oben" hatten.

6.1.11
Weitere Beiträge zu: xtcmodified  

xtcModified Portable: Von 0 auf WebShop in 5 Minuten

Ich verwende xtcModified und den Vorgänger xt:commerce inzwischen schon seit einigen Jahren. Die Installation und Konfiguration auf Linux mit all dem was dazu gehört ist mir inzwischen recht vertraut. Irgendwie ist dabei eine Neuigkeit bei xtcModified an mir vorbeigegangen.

xtcModified 1.05 Portable

Was hat es damit auf sich. Für den Anfänger sind Apache, MySQL, PHP in der Regel Böhmische Dörfer. Und die, die mit einem WebShop beginnen möchten wollen sich damit auch nicht beschäftigen. Meistens wollen Sie einfach mal schauen wie die unterschiedlichen Webshops sich "anfüllen"

Genau dafür ist xtcModfied Portable gedacht.

  • Download
  • Auspacken
  • Readme lesen (ca 10 zeilen)
  • Icon klicken
  • Url Aufrufen

Das wars. Schon kann man loslegen. Keine Server, kein Linux, keine Software Installation. Wenn es einem nicht gefällt (was ich mir bei xtcModified kaum vorstellen kann) : Verzeichniss löschen. Fertig.

201009-xtcModified.png

 


 

21.9.10
Weitere Beiträge zu: xtcmodified  

Einen xtcModified Entwicklungsserver aus Subversion aufsetzen

Dieser Blogeintrag beschreibt den Prozess den ich verwende um auf Basis eines existierenden Subversion Repositories einen neuen Debian Server als Entwicklungsumgebung für xtcModified aufzusetzen. Dieses Dokument dient mehr meiner persönlichen Dokumentation könnte aber auch als Anregung dienen. Es werden auch keine Erläuterungen zu der generellen Arbeit mit xtcModified oder Subversion gegeben. Das Wissen hierzu ist Vorraussetzung.

Da es sich um einen reinen Entwicklungsserver handelt, der lokal ohne Internetanbindung läuft, spielen hier Aspekte wie Sicherheit oder Zugriffskontrolle keine Rolle. Also nicht so einfach übernehmen wenn man den Server "draussen" stehen hat.

Vorraussetzungen sind
- Subversion Repository
- Backup der Verzeichnisse media / images
- Backup der Shop Mysql Datenbank. 
- ein nackter Debian Server mit minimal Setup

Zuerstmal Postfix installieren (sonst installiert mir die Datenbank MySQL später exim4). Dann den ganzen Kram für Apache, MySQL und PHP (kann sein das ein Packet zu viel ist)

apt-get install postfix
apt-get install apache2 apache2.2-common apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5 php5 php5-common php5-gd php5-mysql mysql-server

Jetzt geht es an die Konfiguration der Webserver Verzeichnisses. Zuerst legen wir die notwendigen Verzeichnisse im www Directory an, disablen den default host und richten die Konfiguration unseres neuen Servers ein. Der Benutzer "yourid" wird der Gruppe www-data hinzugefügt damit er später auch das Verzeichniss beschreiben kann.

cd /var/www
mkdir -p /var/www/dev-server/{html,logs,cgi-bin,backup}
chown www-data:www-data dev-server/ -R
usermod -a -G www-data yourid
chmod 770 html -R
a2dissite default
cd /etc/apache2/sites-available
cp default dev-server

vi dev-server
    DocumentRoot /var/www/dev-server/html
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/dev-server/html>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
a2ensite dev-server
a2enmod rewrite

Jetzt brauchen wir unsere Daten. Wenn man die aktuellen Daten aus dem Live Shop braucht sind das die Verzeichnisse "media" und "images" und natürlich die Datenbank. Zuerst eine leere Datenbank auf dem neuen Server erstellen

mysql -u root -p
create database shop;
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'geheim';
GRANT ALL ON shop.* TO 'admin'@'localhost';

und dann den Datenbankinhalte einspielen. Ich sichere immer in eine gepackte Sql-Datei die ich natürlich aus der Sicherung von meinem Live Shop nehme

gunzip shop-datenbanken.sql.gz
mysql --user=admin --password='geheim' shop < shop-datenbanken.sql

Dann die Bilder und anderen Medien. Auf dem Live Server kann man einfach die beiden Verzeichnisse in ein Tar File packen

tar cvf dev-server.tar media/* images/*

und dann auf dem dev-server auspacken.

cd /var/www/dev-server/html
tar xvf /path-to-your-tarfile/dev-server.tar

Die Installation von Subversion wird hier nicht beschrieben. Da ich mein Projekt alleine entwickele und ich auch sonst nur noch einen anderen Benutzer auf meinem System habe arbeite ich einfach mit svn+ssh. Die Verzeichniss und Repository Angaben sind natürlich nur als Beispiel zu verstehen. Sie geben meine Konfiguration wieder.

Zum Testen erstmal probieren ob man "was sieht". Dann in das html Verzeichniss wechseln und den ganzen xtcmodified Baum auschecken.

svn list svn+ssh://your-svn-server/var/svn/repository/directory/trunk
cd /var/www/dev-server/html/
svn co svn+ssh://your-svn-server/var/svn/repository/directory/trunk .

Jetzt brauche ich noch die Konfigurationsdateien. Die verwalte ich getrennt, da der Inhalt ja Servernamen und Datenbank Informationen enthält die auf meinem QA / Development / Live Servern ja  verschieden sind. Jeweils für den Shop und das Admin Backend.

cd includes
svn export svn+ssh://your-svn-server/var/svn/repository/config-directory/dev/includes/configure.php
vi configure.php
cd ../admin/includes/
svn export svn+ssh://your-svn-server/var/svn/repository/config-directroy/dev/admin/includes/configure.php
vi configure.php

So. Das wars - wenn alles richtig ist solltet Ihr jetzt eine exakte Kopie des Servers haben. Und los kanns gehen mit "Basteln mit Fallschirm"

 

25.8.10
Weitere Beiträge zu: xtcmodified   Subversion  

ModSecurity und xtcmodified

ModSecurity ist ja eine Anwendung welche auf Basis von Regeln den Zugriff auf den Apache Server einschränkt. Manchmal kommt es dann natürlich dazu das eine Regel anschlägt ohne das was passiert ist. Innerhalb von xtcModified kann das zum Beispiel auch passieren wenn man eine Produktbeschreibung erstellt.

Auf Basis dieses Beitrages bin ich auf folgende Kombination gekommen.

1. Den Admin Bereich zusätzlich einschränken und einen weiteren Adminacccout festlegen

2. Den dort definierten Namen in die ModSecurity Regeln aufnehmen.

Step 1: Password Authentifizierung auf den administrativen Bereich

cd /var/www/web1x/html/admin

vi .htaccess

     AuthUserFile /var/www/web1x/.htpasswd
     AuthGroupFile /dev/null
     AuthName shopadmin
     AuthType Basic
     require user shopadmin

cd /var/www/web1x
htpasswd2 –c htpasswd shopadmin

Jetzt muss man sich nicht nur mit dem normalen Shop Administrator anmelden sondern auch noch den obigen Namen. Wenn man paranoid ist dann nimmt man einen anderen als den User der in der Shopdatenbank steht.

Step 2: ModSecurity  anpassen

Jetzt brauchen wir wir noch den Freifahrtschein für modsecurity

vi modsecurity_crs_15_customrules.conf 

# shopadmin user darf alles
SecRule REMOTE_USER "shopadmin" allow
13.3.10
Weitere Beiträge zu: ModSecurity   xtcmodified  

xt-commerce: Auswechseln von Listing Templates in der Datenbank

Bei einem xt:commerce Shop gibt es ja die Möglichkeit verschiedene Templates für die Darstellung von Produkt- und Kategorielisten zu haben. Da mir am Anfang etwas das Wissen fehlte habe, ich an der einen oder anderen Stelle die falsche Entscheidung getroffen. Das Ende vom Lied war das ich mehrere verschiedene Listentemplates hatte. Ich habe sie dann zwar wieder auf jeweils eins konsolidiert und mit symbolischen Links kombiniert aber in der Datenbank war in den Produkten natürlich immer noch Durcheinander. Mit folgenden Datenbankbefehlen konnte ich hier aufräumen. (Hinweise / Warnungen beim Arbeiten mit der mysql console hier)

Es gibt Templates für Kategorie- / Produktlisten und Templates für Produktinformationen

1. Produktinformationen

Welche falschen Templates stehen in der Datenbank? Zeige mir alle Produkte wo das Template nicht das gewünschte ist.

select products_id,product_template from products where product_template!='product_info_v1.html' ;

Tausche alle aus die nicht richtig sind

update products set product_template='product_info_v1.html' where product_template!='product_info_v1.html' ;  

2. Kategorielisten

Welche falschen Templates stehen in der Datenbank? Zeige mir alle Kategorien wo das Template nicht das gewünschte ist.

select categories_id,categories_template from categories where categories_template!="categorie_listing.html" ;

Tausche alle aus die nicht richtig sind

update categories set categories_template='categorie_listing.html' where categories_template!='categorie_listing.html' ;

3. Produktlisten

Gib mir alle Kategorien die ein bestimmtes Template nicht verwenden.

select categories_id, listing_template from categories where listing_template!='product_listing_v1.html' ;

Tausche alle aus die nicht richtig sind

update categories set listing_template='product_listing_v1.html' where listing_template!='product_listing_v1.html' ;

Hilfreiche Befehle

Wie kann man herausfinden welche Tabellen es gibt?

SHOW TABLES;

Wie kann man herausfinden welche Spalten es in einer Tabelle gibt? (hier die Tabelle products)

show columns from products ;

 

21.2.10
Weitere Beiträge zu: mysql   xtcmodified  

xt:Commerce: Kommentarvorlagen löschen

Wenn man in xt-commerce oder noch besser in xtcmodified die Kommentarvorlagen von hier verwendet, kann man sich lästige Tipparbeit etwas sparen. Man hat die Möglichkeit, persönliche Kommentare aus einer Auswahlliste heraus in das Kommentarfeld zu setzen. Diese werden dann bei einer Statusänderung per Email gesendet. Eine einfache aber effektive Sache. Vielleicht gibt es das auch von woanders aber damals hatten wir das nur dort gefunden.

Allerdings gibt es keine Möglichkeit existierende Kommentare zu editieren und neu abzuspeichern. Da ich ein Fan von minimalistischen Kommandozeilen bin und "unnötige" Oberflächen wie phpmyadmin gerne vermeide hilft also nur der Griff in die Datenbank. Dort löschen und neu anlegen.

Hier ist meine Doku. Wie bei jedem Aufruf der Mysql Kommondozeile: erst Datenbankbackup und wie bei allen Dingen hier in meinem Blog. "Use at your own risk" (tut aber nicht weh habs grad genauso gemacht ;-)

Was ist zu tuen

1. Anmelden an der Datenbank

2. Anzeige der existierenden Kommentare und IDs

3. Löschen des Kommentar mit der ID

#mysql -u datenbankuser -p yourxtcommerce-db

mysql> select id,title from mail_templates;

+----+--------------------------------------+
| id | title                                |
+----+--------------------------------------+
|  1 | x test1.1                            |
|  2 | Kommentarbaustein 1....              |
|  3 | Kommentarbaustein2 .....             |

mysql> delete from mail_templates where id='die-nummer-die-ihr-loeschen-wollt' ;

Interessiert wahrscheinlich keinen aber jetzt verstehe ich es wenigstens wieder wenn meine Frau das mal wieder braucht.

5.2.10
Weitere Beiträge zu: mysql   xtcmodified   Linux  

Dies ist ein privater Blog von Hagen Bauer- berufstätiger Vater, Ehemann, Naturliebhaber, Läufer, Zelter, technikverliebt.


Creative Commons License
This blog is licensed under a Creative Commons License