Alles was mit Programmierung zu tun hat.

1und1, WordPress Blogs und der 500 Internal server error

Hallo,

da hatte ich doch gerade mal wieder ein Problem. Kommt ja ab und zu mal vor :-) Und wie es scheint habe ich den nicht alleine. Es gibt schon einige User mit dem Problemchen.

Ich wollte auf einem 1und1 Webspace einen WordPress Blog installieren (V. 3.0.01) und bekam probt einen „500 Internal Server Error“.

Die Lösung ist einfach, aber normalerweise kommt man darauf selbst nur schwer, da er absolut unnatürlich ist :-)

Den folgenden Code in die .htaccess einfügen und der Blog sollte laufen.

 
AddType x-mapp-php5 .php 
AddHandler x-mapp-php5 .php 

.htaccess – Webseite mit oder ohne WWW

Hallo,

da meine Lieblingsseite, zur Frage „www erzwingen bei einer Webseite durch .htaccess“, anscheinend nicht mehr online ist, nehme ich mir einfach mal die Freiheit raus hier selbst einen Artikel darüber zu schreiben und den Ansatz zu kopieren.

Also, es ist ja (hoffentlich) allseits bekannt das Google keinen Dublicated Contant mag (also mehrfach die gleichen Texte). Das passiert natürlich auch wenn man eine Webseite einmal mit „www“ und einmal ohne aufrufen kann. Deswegen gibt es eine Umleitung. Wenn ein User die Webseite ohne „www“ aufruft dann wird er gleich zur Webseite mit „www“ Umgeleitet.

Das ist jedoch auch interessant wenn man mit seiner Webseite von http://www.domainA.de zu http://www.domainB.de umgezogen ist.
Der unten stehende Code ist einer der besten die ich jemals im Netz gesehen habe. Denn er funktioniert 1a und ist flexibel. Außerdem werden auch Parameter mit übergeben. Es geht also nichts verloren bei der Umleitung (Dateinamen, Parameter, etc.)

Hier nun der Code. Einfach die Domain anpassen und in die eigene .htaccess einbauen:


RewriteEngine On
RewriteCond %{HTTP_HOST} ^domainA.de$ [NC]
RewriteRule ^(.*) http://www.domainA.de%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} ^domainA.de$ [NC]
RewriteRule ^(.*) http://www.domainA.de/ [L,R=301]

[PrestaShop] Rechnungs-PDF in Bestell-E-Mail

Hallo zusammen,

heute gab es mal wieder ein problem zu lösen das evtl. auch andere interessieren könnte. Zumindest jeden der einen PrestaShop im einsatz hat.

Das problem: Wenn ein kunde etwas im shop bestellt dann erhält er natürlich eine bestellbestätigung per email. Nur wird hier die rechnung nicht mitgeschickt.

Die lösung: Recht einfach, nur nicht einfach zu finden. :-)

Schritt 1) In den administrationsbereich des shops gehen und hier auf „orders“ -> „statuses“ klicken (sorry, ist bei mir die englische version). Dann in der tabelle bei „invoice“ alles anklicken außer „Chanceled“ und „Payment error“. – Das müssen wir machen da sonst die rechnung nicht direkt bei der bestellung generiert wird.

Schritt 2) Jetzt müssen wir ein bisschen in den quellcode. Suche die datei „/classes/paymentmodule.php“ und suchen sie die folgende passage (ungefähr bei zeile 350):


// Join PDF invoice
if (intval(Configuration::get('PS_INVOICE')) AND Validate::isLoadedObject($orderStatus) AND $orderStatus->invoice AND $order->invoice_number)
{
	$fileAttachment['content'] = PDF::invoice($order, 'S');
	$fileAttachment['name'] = Configuration::get('PS_INVOICE_PREFIX', intval($order->id_lang)).sprintf('%06d', $order->invoice_number).'.pdf';
	$fileAttachment['mime'] = 'application/pdf';
}
else
	$fileAttachment = NULL;

und mache daraus:


// Join PDF invoice
//if (intval(Configuration::get('PS_INVOICE')) AND Validate::isLoadedObject($orderStatus) AND $orderStatus->invoice AND $order->invoice_number)
//{
	$fileAttachment['content'] = PDF::invoice($order, 'S');
	$fileAttachment['name'] = Configuration::get('PS_INVOICE_PREFIX', intval($order->id_lang)).sprintf('%06d', $order->invoice_number).'.pdf';
	$fileAttachment['mime'] = 'application/pdf';
//}
//else
//	$fileAttachment = NULL;

Jetzt wird immer eine Rechnung an die mail angehängt. Es gibt aber noch einen kleinen schönheitsfehler. Den bügeln wir so aus… ca. zeile 300 suchen… sieht in etwa so aus.


...
	// Send an e-mail to customer
	if ($id_order_state != _PS_OS_ERROR_ AND $id_order_state != _PS_OS_CANCELED_ AND $customer->id)
	{
		$invoice = new Address(intval($order->id_address_invoice));
		$delivery = new Address(intval($order->id_address_delivery));
		$carrier = new Carrier(intval($order->id_carrier));
		$delivery_state = $delivery->id_state ? new State(intval($delivery->id_state)) : false;
		$invoice_state = $invoice->id_state ? new State(intval($invoice->id_state)) : false;
...

und hängen da einfach die folgende (letzte) zeile dran


...
	// Send an e-mail to customer
	if ($id_order_state != _PS_OS_ERROR_ AND $id_order_state != _PS_OS_CANCELED_ AND $customer->id)
	{
		$invoice = new Address(intval($order->id_address_invoice));
		$delivery = new Address(intval($order->id_address_delivery));
		$carrier = new Carrier(intval($order->id_carrier));
		$delivery_state = $delivery->id_state ? new State(intval($delivery->id_state)) : false;
		$invoice_state = $invoice->id_state ? new State(intval($invoice->id_state)) : false;
		$order = new Order(intval($order->id));
...

Damit sollte es funktionieren und schön aussehen :-)

Wer nun, wie ich, noch änderungen an der rechnung selbst vornehmen möchte der muss leider auch in den code. Die datei ist „/classes/PDF.php“. Aber bitte nur für änderungen die sonst nicht vorgenommen werden können. Adresse und footer und so kann alles im admin eingestellt werden ;)

Soweit erst einmal dazu. Bei fragen, bitte gleich fragen… bevor ich wieder vergessen hab wie das war :-)

Achso… prestashop 1.3.0.10

Affiliate Tracking Code in PrestaShop einbinden

Hallo zusammen,

da ich jetzt meinen ersten eigenen Online-Shop eröffnet habe bin ich auch schnell auf die Frage gestoßen wie die Kunden zu mir finden. Oder wer mir dabei helfen kann.
Schnell war eine Antwort gefunden… Affiliate Marketing. Das gefällt mir im Moment eh am besten von den Marketingmethoden die ich so kenne und wofür mein Geldbeutel reicht. Alles andere ist entweder unwirtschaftlich oder schlicht zu teuer… meist beides.

Also habe ich bei beim Affiliatenetzwerk meines Vertrauens eine neue Kampagne gestartet und dann die große Frage… wie kriege ich den Tracking-Code in meinen Presta Shop System? :-o
Das ist gar nicht so einfach da ja auch noch variablen übergeben werden müssen.

Zum Glück gibt es ja das Internet :-) Und so wurde ich in einem Forum fündig. Hier das Zitat der Zusammenfassung von PaoloPinkel

 

1.) In die init.php gehört folgendes:


@session_start();
if(Tools::getValue('belboon')){
  $_SESSION['belboonSession'] = Tools::getValue('belboon');
}

2.) In die order-confirmation.php gehört:


$smarty->assign('belboon',$order->getTotalProductsWithTaxes());
$smarty->assign('belboonSession',$_SESSION['belboonSession']);

3.) In die order-confirmation.tpl, gehört der von Belboon vorgegebene Code. In diesem Code-Schnipsel ersetzt man NETTOWARENWERT durch {$belboon}, ORDERCODE durch {$id_order} und xxxx,yyyy durch {$belboonSession}.

Das war’s. Wer Umsatzsteuer abführt, muß von getTotalProductsWithTaxes() irgendwie noch die Steuern abziehen, sonst zahlt er zu viel Provision.

(Zitat von http://www.homepage-community.de/…)

PaoloPinkel hat sich bei Belboon angmeldet. Ich nutze ein anders Netzwerk. Ist aber das gleiche Prinzip. Man muss nur die Variablen anpassen.

Danke an PaoloPinkel und Chris.

Viele Grüße
Gordon

[WordPress] HTML-Dateiendung in Artikeln, Seiten, Tags und Kategorien

Hallo zusammen,

ich spiele ja in der letzten zeit auch endlich mal ein bisschen mit SEO rum und überhaupt hat es mich schon eine weile gestört das in wordpress keine vernünftigen dateiendungen integriert sind. Google mag es mit sicherheit nicht wenn eine url auf „…/category/fun“ endet… ohne slash ohne „.html“ … ohne alles. Einfach zu ende.

Nun ist es sehr einfach bei wordpress an jeden artikel ein „.html“ anzuhängen. Das kann man ganz einfach in den permalinks in den optionen einstellen. Möchte man das auch bei seiten und sogar bei den kategorien machen… hat man schon ein problem.
Und so habe ich mich auf die suche begeben und bin fündig geworden.

Ich bin über 10 ecken auf das plugin „.html on pages“ aufmerksam geworden. Das ist erst einmal teilweise was ich suchte. Denn das dieses plugin fügt nur bei seiten die dateiendung „.html“ hinzu… nicht bei kategorien. :-(

Also selbst ein bisschen rumgefummelt und siehe da… nun geht es auch bei den kategorien. :-) Da mein blog noch immer code nicht vernünftig darstellt habe ich das überarbeitete plugin einfach noch mal gezippt und du kannst es >hier< downloaden. Ich habe auch die readme.txt noch mal erweitert.

Nun gab es aber gleich noch ein problem. Mein blog besteht ja nun schon eine weile und es gibt schon so einige urls die auch bei google indexiert sind und verlinkungen zu anderen seiten. Also würden alle anfragen auf die alten urls auf der 404 seite landen. Das wäre natürlich nicht so toll.
Daher musste noch ein 301 redirect her. Der kommt in die .htaccess über die regeln von wordpress – logisch. Hier der htaccess code:

RewriteCond %{REQUEST_URI} ^/[^.]+[^/]$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1.html [L,R=301]

Damit werden alle seiten ohne .html und ohne slash (/) am ende mit der endung „.html“ versehen. … Damit haben wir es … oder?

Nee, leider immer noch nicht. Ein kleiner fehler ist mir – bis jetzt – aufgefallen. Möchte ich meinen rss-feed abrufen… schickt er mich auf die 404-seite (seite nicht gefunden). Warum? Auch er bekommt ein „.html“ angehängt… aber der feed kann damit nicht aufgerufen werden. Er funktioniert immer noch ohne. Also schnell noch ein eintrag in der .htaccess. Am besten ganz oben:

RewriteRule ^feed$ feed/ [L,R=301]

So, jetzt bekommt er ein slash und wird damit von der anderen regel ignoriert.

Nun haben wir es erst einmal. :-)
Bitte beachtet das eine änderung in den permalinks im adminmenü die .htaccess änderungen unter umständen wieder rausschmeißt.

—-

Ach gleich das nächste problem. Ok, durch die rewrite rule wird nun überall .html hinzugefügt. Das ist nicht immer schön. Ich habe noch die nextgen galerie installiert. Die arbeitet nun natürlich auch nicht mehr. :-( Denn auch sie kann mit den html-endungen nicht umgehen. Mist…
Also wer noch andere urls braucht der muss die htaccess regel modifizieren. Ich habe meine jetzt geändert zu:

RewriteCond %{REQUEST_URI} ^/[^.]+[^/]$
RewriteCond %{REQUEST_URI} !^/nggallery/[^.]+[^/]$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1.html [L,R=301]

Damit sage ich „nur wenn in der url nicht ’nggallery/‘ enthalten ist.

Ich hoffe es geht alles gut :-)

CU
Gordon

Update:
Da muss ich gleich noch mal ein Update hinterherschießen. Habe gerade festgestellt es gibt ja auch noch die Tags. :-) Habe das Plugin auch gleich noch mal modifiziert. Jetzt werden die urls für seiten, kategorien und tags unterstützt. Artikel urls kannst du ja selbst im administrationsbereich einstellen.

[WordPress] Geheime Einstellungsmöglichkeiten

Hallo zusammen,

gerade habe ich weder einmal etwas dazugelernt.

Ich wollte meinen RSS-Feed bei portalen eintragen und da meinte eines doch glatt das sie keine englischen feeds aufnehmen… :-o Wie, english? Wie kommen die denn darauf?
Ganz einfach, weil mein rss-feed auf english (en) steht.

Gut… wie ändere ich das jetzt? Alle einstellungsseiten durchgesehen… nix gefunden. Ich wollte schon wieder in den quellcode gehen als ich noch eine andere, höchst interessante, lösung fand. Es gibt nämlich bei wordpress eine einstellungsseite auf die man normalerweise nicht gelangt. Kein link im menü führt dorthin… eine geheime einstellungsseite quasi :-)

Wie kommt man nun dort hin. Erst einmal ins backend einloggen. Dann nach „wp-admin/“ options.php eingeben. Also so das die url in etwa so aussieht: http://www.domain.de/wp-admin/options.php

Hier gibt es (zwischen den vielen anderen) die einstellmöglichkeit „rss-language“… hier muss man „de“ eingeben. Und schon ist der rss-feed auch in deutsch.

Aber auf der seite gibt es noch zig andere einstellmöglichkeiten… in denne niemand rumfummeln sollte der nicht weiß was er tut… deswegen ist sie auch so gut versteckt ;-)

Viele Grüße
Gordon

Größe von Bildern einfach ändern

Hallo zusammen,

immer wieder gelangt man zu einem bestimmten problem… man möchte bilder in das internet laden und dann dauert es ewig, der upload bricht ab oder die Seite macht einfach gar nichts mehr bzw. gibt fehler aus. Oder sie quitiert den dienst einfach mit der folgenden (oder änlichen) fehlermeldung „Bilder sind zu groß“.

Digitalkameras machen heutzutage sehr gute bilder in einer sehr großen auflösung. Generell ist das gut da so eine bessere qualität bei herauskommt. Für den upload in das internet ist dies aber negativ. Die dateien werden immer größer und brauchen somit länger für den upload und auch mehr speicherplatz auf dem server.

Also gibt es nur eine lösung, die schönen neuen großen bilder doch wieder kleiner machen. Zumindest für den upload in das internet.

Nun gibt es tausende von programmen die dies ermöglichen. Von professionellen bildbearbeitungsprogrammen wie z.B. Photoshop (sehr teuer!) oder Gimp (kostenlos) bis zu kleinen helferlein wie z.B. VSO Image Resizer. Das letztere möchte ich hier einmal vorstellen da ich damit arbeite und es für gut befinde. Es ist sehr einfach und hat den großen vorteil das mit dem programm auch mehrere bilder in einem rutsch geändert werden können. Und für den privaten gebrauch ist es kostenlos. Für kommerzielle anwendung kostet es aktuell auch nur 15 USD.

Erst einmal müssen sie sich die datei natürlich runterladen. Die herstellerwebseite findest du hier. Einfach die kostenlose version herunterladen und installieren.

Beim starten fragt das programm immer erst einmal natürlich ob man kostenlos weitermachen möchte oder ob man es vielleicht doch kaufen möchte. Einfach auf „Fortfahren“ klicken und weiter gehts.
Danach öffnet sich ein neues fenster „Öffnen“ in dem du die bilder auswählen kannst die du ändern möchtest. Wenn es mehrere bilder sind dann habe ich mir angewöhnt ein neues verzeichnis auf der festplatte anzulegen und dort erst einmal alle bilder reinzukopieren die ich ändern möchte. Hat den vorteil das ich im programm dann nicht extra noch suchen muss und – wenn die bilder in mehreren verzeichnissen liegen – auch noch mehrere durchgänge machen muss. Alles in einem rutsch und fertig.
Also bilder auswählen. Möchte man nur eines ändern dann einfach drauf klicken, mehrere kann man mit der STRG-Taste auswählen und alle am besten indem man die linke maustaste gedrückt hält und über alle bilder zieht… oder STRG+A. Nachdem man alle gewünschten bilder markiert hat einfach auf „Öffnen“ klicken.

Nun kann man bei „Profil“ ein vordefiniertes profil auswählen, oder auch nicht. :-) Die auflösung ist wichtig. Hier sollte man zwischen 640×480 bis 1024×768 eingeben… ich nehme meist 800×600. Reicht meist völlig aus für das web. Und natürlich dahinter in „px“ (Pixeln).

Sollte hinter der Auflösung ein „>> mehr…“ stehen so bitte drauf klicken. Dann erscheinen darunter noch ein paar weitere einstellmöglichkeiten.

Uns interessiert hier erst einmal nur der reiter „Allgemein“.
„Filtering“ ist immer „am besten“ :-)
Bei „Format“ kann ein neues Dateiformat eingestellt werden. Für internetbilder empfehle ich immer jpg da es die beste komprimierung hat und dabei die beste qualität.
Apropos „Qualität“… diese kann man hier noch einmal seperat einstellen. Standartwert würde ich 75% vorschlagen. Sollten die bilder dann noch zu groß sein kann man noch weiter runter gehen. Bis 50% sollte die qualität einigermaßen ok sein. Darunter wird es dann schlechter.
„Original Seitenverhältnis beibehalten“ sollte angeklickt sein damit keine metamorphosen bei rauskommen ;-) „Auflösung für Portrait anpassen“ habe ich noch nie ausprobiert… ob man es braucht… who knows.
Bei der „Dateinamenmaske“ kann man noch bestimmen wie der dateiname aussehen soll… ob das programm nach dem dateinamen noch ein „(Kopie)“ anhängt oder sonstiges. Hier sind die voreinstellungen schon ok. Man braucht hier nicht unbedingt noch etwas ändern.

Dann noch zwei wichtige sachen. Bei „Aktion“ kann man wählen ob man eine „Kopie erstellen“ möchte – also das original bleibt erhalten und das geänderte bild wird in einer neuen datei gespeichert (wie in „Dateinamenmaske“ vorgegeben) – oder ob man das „Original ersetzen“ möchte – die original bild datei wird überschrieben und ist weg(!!) – oder ob man „Verschieben“ möchte – hab ich noch nie gemacht… vermute das die neue bilddatei in einem anderen ordner gespeichert wird.
Und darunter gibt es dann noch das „Ziel“. Hier gibt man an wo die neue bilddatei gespeichert werden soll.

Dann einfach auf „OK“ klicken und das programm tut seine arbeit. Das schöne, wenn man (z.B.) 50 Bilddateien ausgewählt hat dann arbeitet das programm alle 50 mit einem mal ab. Ohne jedes mal neu alles eingeben zu müssen.

Wenn das programm seine arbeit getan hat findet man seine neuen bilder – je nachdem was man eingestellt hat – in dem entsprechenden ordner wieder und kann sie nun getrost ins internet laden. ;-)

[PHP] NextGEN Gallery – Sortierung der Galerien

Hallo zusammen,

mal wieder die NextGEN Gallery.
Da ich es leid bin nun ständig alle Bilder per Hand zu bearbeiten und hochzuladen habe ich die Flash-Upload entdeckt… nachdem ich die Galerie schon Monate benutze. :-) Ein schickes Tool wenn man richtig viele Bilder hochladen möchte. Das funktioniert auch super! Nur einen kleinen Schönheitsfehler gibt es… die Sortierung.

Denn lade ich ein Bild einzeln hoch… dann landet es als erstes in der entsprechenden Galerie. Richtig, so soll es ja auch sein. Ist ja das neuste Bild also muss es als erstes angezeigt werden. Lade ein ganzes Verzeichnis per Flash Upload hoch dann bedeutet es (bei mir jedenfalls) das ich z.B. einen Tagesausflug dokumentiert habe… und dann möchte ich das dass erste geschossene Bild (also das eigentlich älteste) auch an erster Stelle haben.

Gut, der Programmierer kann das nicht voraus ahnen… aber er könnte z.B. für jede Galerie eine eigene Sortierungsoption angeben ;-)

Ich habe es für meine Zwecke (mal wieder) direkt im Quellcode geändert. Keine schöne Lösung, aber selten :-)

Wenn Du das auch so machen möchtest (vorsicht, beim nächsten Update ist alles wieder beim alten)… dann mache folgendes:

Rufe die Datei /wp-content/plugins/nggallery/nggfunctions.php mit einem Editor auf. Gehe in die Zeile 249 (ungefähr). Hier werden die Bilder sortiert:

$ngg_options[‚galSortDir‘] = ($ngg_options[‚galSortDir‘] == „DESC“) ? „DESC“ : „ASC“;

Ich habe es wie folgt gelöst. 2 verschiedene Alben. Eines mit Gallerien wo ich einzelne Bilder hochlade (aktuelle von mir oder so) und ein Album wo ich Galerien habe wo ich immer ganze Verzeichnisse hochlade. Du musst die ID’s der beiden Alben kennen. Hier nehme ich einfach 1 und 2 für das Beispiel.

Füge nun über der obigen Zeile den folgenden Code ein:

$album = get_query_var(‚album‘);

Damit haben wir nun die ID des aktuellen Albums. Jetzt müssen wir wissen welche Sortierung für welches Album. Album 1 ist letzte zuerst, also ASC. Bei Album 2 DESC.

if($album == 1) $ngg_options[‚galSortDir‘] = ($ngg_options[‚galSortDir‘] == „DESC“) ? „ASC“ : „DESC“;
else $ngg_options[‚galSortDir‘] = ($ngg_options[‚galSortDir‘] == „DESC“) ? „DESC“ : „ASC“;

Nun kann es sein das es jetzt genau falsch sortiert ist. Je nachdem wie Du die globale Sortierung eingestellt hast. Dann einfach entweder die globale Sortierung ändern oder $album == 1 gegen $album == 2 tauschen.

Das wars. Aber wie gesagt, wenn Du das nächste Update machst… ist wahrscheinlich alles wieder weg.

Gruss
Gordon

[PHP] Alle belegten Variablen anzeigen/ausgeben

Hallo,

heute habe ich mich spaßeshalber mal gefragt wie eigentlich die variablen am Ende meines Skripts aussehen. Ich meine da wird eine variable vergeben, Skripte included, datenbankabfragen gemacht… und ich bemühe mich immer die variablen wieder frei zu geben wenn ich sie nicht mehr brauche. Aber erwische ich auch alle… oder Frist mein Skript mehr und mehr speicher? Und wie kann ich das kontrollieren?

Es gibt auch hier eine Funktion in PHP die das beantworten kann. get_defined_vars() gibt alle aktuell belegten variablen aus.

print_r(get_defined_vars());

Dieser Aufruf am Ende eines Skriptes (oder irgendwo mittendrin) und man weiß sofort welche Variablen belegt sind und wo man noch aufräumen muss/kann.

Sehr schön :-)

Gruss
Gordon