Archiv der Kategorie: Computer und Internet

Eine Sammlung der Beitrage rund um Computer und Internet

Tableiste bei Thunderbird in die Titelleiste/Topleiste verschieben (Ubuntu Gnome)

Halli Leute,

gerade wer einen kleinen Bildschirm hat (Laptop) wird die Situation kennen. Einige Programme verwenden viel zu viel Platz. Besonders aufgefallen ist mir das bei Gnome mit Ubuntu. Ich habe mir seit langem mal wieder eine neue Version angetan und bin gerade dabei diese zu optimieren.

Problem

Bei Thunderbird wird die Tableiste platzverschwendend unter der Menübar angezeigt. Dies ist (zumindest in Windows und anderen Betriebssystemen) über die Einstellung (about:config) „mail.tabs.drawInTitlebar:true“ möglich. Leider wird diese Einstellung aber mit Gnome ignoriert.

Bildschirmfoto vom 2014-10-08 11:44:42

 

Lösung

Abhilfe schafft hier folgende Erweiterung: https://addons.mozilla.org/de/thunderbird/addon/htitle/

Einfach installieren und schon sieht es deutlich aufgeräumter aus:

Bildschirmfoto vom 2014-10-08 13:25:44

 

Zwar werden die Tabs nicht in die Titelbar verschoben, aber diese verschwindet einfach komplett. Ich bin mit dieser Lösung zufrieden und hoffe euch damit helfen zu können.

Übrigens: Wie es mit Chrome funktioniert habe ich hier geschrieben: Chromium Browser: Tabs in Titelleiste verschieben

 

JDownloader 2.0 BETA auf Ubuntu 14.04 LTS installieren

Halli Leute,

diesen Beitrag ist ein Anschlussbeitrag zu JDownloader 2.0 BETA auf Ubuntu 13.10 installieren. Ich hab mich jetzt endlich dazu entschieden Ubuntu 14.04 LTS zu installieren. Mit diesem Beitrag möchte ich nur sicher gehen, dass mit Ubuntu 14.04 LTS immer noch alles passt.

Vorbereitung

Zuerst einmal checken ob Java installiert ist:

java -version

Wird hier nichts oder ein Fehler angezeigt, muss Java zuerst installiert werden. Hierzu einfach folgenden Befehl ausführen

sudo apt-get install  openjdk-7-jre

Jetzt müsst ihr euch die JDownloader.jar-Datei herunterladen. Ich weiß leider nicht mehr wo ich sie her habe, sonst würde ich euch die original Quelle nennen. Hier einfach als Download: jdownloader_2.0_BETA.zip. Darin enthalten ist eine .jar-Datei. Beim ersten ausführen werden alle aktuellen Daten vom JDownloader-Server gezoge. Und alles ohne Werbung und Co.

Installation

Wenn ihr die Datei im Zip-File entpackt habt verschiebt ihr es an einen Ort eurer Wahl. Diese Anleitung nimmt den Ordner /opt/jdownloader/ (diesen Ordner müssen wir erst mal erstellen):

sudo mkdir /opt/jdownloader
sudo mv JDownloader.jar /opt/jdownloader/

Nun das Programm starten, damit alle Dateien heruntergeladen werden können.

sudo java -jar /opt/jdownloader/JDownloader.jar

Wenn alles fertig ist das Programm beenden und noch kurz die Rechte ändern. Bei dem folgenden Befehl müsst ihr noch euren aktuellen Benutzer ändern.

sudo chown -R benutzer:benutzer /opt/jdownloader/

Ab sofort könnt ihr den Jdownloader mit folgendem Befehl starten:

java -jar /opt/jdownloader/JDownloader.jar

Shortcut erstellen

Da uns das ja sicherlich viel zu umständlich ist, erstellen wir noch einen shortcut. Die Anleitung ist angelehnt an die Anleitung von Ubuntu selbst: http://wiki.ubuntuusers.de/.desktop-Dateien

Im Ordner /usr/share/applications/ wird die Datei jdownloader.desktop erstellt und mit Inhalt gefüllt:

sudo vim /usr/share/applications/jdownloader.desktop

In die Datei einfach folgenden Text eingeben:

[Desktop Entry]
Name=JDownloader
Name[de]=JDownloader
GenericName=Downloader
GenericName[de]=Downloader
Comment=JDownloader
Comment[de]=Jdownloader
Exec=java -jar /opt/jdownloader/JDownloader.jar
Icon=/opt/jdownloader/themes/standard/org/jdownloader/images/logo/jd_logo_64_64.png
Terminal=false
Type=Application
StartupNotify=false
OnlyShowIn=GNOME;XFCE;

Ab jetzt kann JDownloader einfach über den Befehl JDownloader gestartet.

Chromium Browser: Tabs in Titelleiste verschieben

Halli Leute,

heute nur ein kleiner Tipp weil es mir auf meinem kleinen Laptopbildschirm aufgefallen ist. Auf kleinen Bildschirmen hat man oft nicht viel Platz und da ist eine dicke Titelleiste oft einfach nur Platzverschwendung.

Ich möchte also von dem Standard hier:

Chromium Titelleiste

Titelleiste vorher

Auf das hier:

Chromium Titelleiste

Titelleiste nachher

 

Lösung

Das zu erreichen ist sehr einfach. Dazu nur die Einstellungen von Chromium aktivieren und den Haken bei „Titelleiste und Ränder des Systems verwenden“ rausnehmen (auf dem Screenshot ganz unten).

Chromium Einstellungen

Chromium Einstellungen: Den untersten Haken rausnehmen

 

Und schon spart man sich ca. 1cm Platz auf dem Bildschirm :). Ich hoffe mal ich konnte dem Einen oder Anderen weiterhelfen.

 

 

Mehrere robots.txt für unterschiedliche Shops in Magento

Hallo Leute,

nutzt man die Multishop-Fähigkeit von Magento darf man mit allerhand Dingen jonglieren. So auch mit der robots.txt. Meine robots.txt sieht wie folgt aus:

User-agent: *
Disallow: /*.js$
Disallow: /*.css$
Disallow: /*.php$
Disallow: /customer/
Disallow: /review/
Disallow: checkout/
Disallow: /admin/
Disallow: /app/
Disallow: /skin/
Disallow: /var/
Disallow: /wishlist/
Sitemap: https://www.blubberladen.de/media/sitemap/blula/sitemap.xml

Da die robots.txt aber im root-Verzeichnis liegt und ich mehrere Shops mit einer Magento Instanz habe, müsste ich eigentlich zwei verschiedene robots.txt für beide Shops haben. Nichts leichter als das.

Mehrere robots.txt mittels .htaccess

Fügt in der .htaccess-Datei im root-Verzeichnis von Magento folgendes bei Zeile 116 ein:

############################################
## enable rewrites

    Options +FollowSymLinks
    RewriteEngine on

###########################################
## different robots.txt for both sites

    # Page1
    RewriteCond %{HTTP_HOST} blubberladen\.de$
    RewriteRule ^robots\.txt$ /robots-blula.txt [L]

    # Page 2
    RewriteCond %{HTTP_HOST} bier-kaufen\.de$
    RewriteRule ^robots\.txt$ /robots-bika.txt [L]

Bei mir sind es blubberladen.de und bier-kaufen.de (das www spielt dabei keine Rolle) die unterschieden werden sollen.  Wenn die robots.txt der entsprechenden Webseite aufgerufen wird, wird diese auf robots-bika.txt bzw. robots-blula.txt umgeleitet.

So einfach kann man mehrere robots.txt in einer Magentoinstallation einstellen.

Update 13.09.2014

Na ich bin ja einer, verbiete den Bots auf /media/ zu gehen und stell dort meine Sitemap zur Verfügung… Ist gefixt.

Brother MFC-9140CDN Maintanance Mode aktivieren

Hallo Leute,

habe vom Supportmitarbeiter von Brother heute einen Tipp bekommen wie man in den Maintanance Mode vom Gerät kommt. Achtung: Hier ist Vorsicht geboten, man kann hier ganz schön viel Unfug treiben. Passt auf was ihr macht und natürlich gilt: Alles passiert auf eure Verantwortung. Die meisten Methoden habe ich zwar an meinem Gerät getestet, aber eine Garantie, dass alles 100%ig klappt, kann ich leider nicht geben.

Den Maintanance-Mode erreichen

  • Das Gerät muss eingeschaltet sein.
  • Drücken Sie am Display einen der Buttons FAX/ Kopierer/ Scanner
  • Nun leuchtet der Home- Button auf.
  • Drücken Sie nun den Home- Button solange bis vier Felder erscheinen.
  • Drücken Sie nun das letzte, leere Feld solange bis ein Tastenfeld angezeigt wird.
  • Geben Sie nun die Tasten *, 2, 8, 6, 4 ein.
  • Gerät geht in den Maintenance Mode
  • 99 eintippen um den Maintenance Mode zu verlassen

Mögliche Befehle

Hier folgt nun eine Liste mit möglichen Befehlen und Funktionen die geändert werden können. Wer was neues findet, einfach in den Kommentar schreiben, dann nehme ich es in die Liste mit auf.

Statusausdruck mit allen Details

  • 77 eintippen
  • Gerät mach einen Statusausdruck

Menüsprache des Brother MFC-9140CDN ändern

Die Menüsprache kann über den Maintanance-Mode geändert werden indem man den Country-Code ändert. Es werden dadurch wohl auch weitere Einstellungen für das Land geändert. So zum Beispiel die FAX-Einstellungen. Bitte testet nach der Änderung den Funktionsumfang eures Gerätes. Um den Country-Code zu änderngeht man wie folgt vor:

  • 74 über die Tastatur auf dem LCD eintippen
  • Oben Links erscheint nun eine nummer mit dem aktuellen Country-Code des Gerätes
  • Countrycode über Tastatur auf dem LCD ändern
  • Mit „Mono Start“ (Taste rechts oben) bestätigen
  • Maintanance Mode mit 99 verlassen

Die mir bekannten Country-Codes habe ich nicht alle getestet, daher erfolgt wie immer die Änderung auf eigenen Risiko. Wer weitere Country-Codes hat, kann Sie gerne im Kommentar hinterlassen, dann werde ich sie in dieser Liste mit aufnehmen. Bei Einträgen mit einer weiteren Nummer in der Klammer bin ich leider nicht sicher (die Nummern sind aus den Untiefen des Internet 😉 ). Wenn ihr eine Nummer bestätigen könnt, einfach kurz in den Kommentar schreiben.

  • Schweiz: 0310
  • Italien: 0316
  • Spanien: 0365 (0315)
  • Portugal: 0365 (0318)
  • Frankreich: 0355 (0305)
  • Belgien: 0355 (0308)
  • Niederlande: 0355 (0309)
  • Polen: 0388 (0339)
  • Großbritannien: 0304 (Habe ich selbst getestet und kann den Code Bestätigen)
  • Deutschland: 0303 (Habe ich selbst getestet und kann den Code Bestätigen)

Maintenance Mode verlassen

  • 99 eintippen um den Maintenance Mode zu verlassen

Die genannten Befehle wurden mir von einem Service-Techniker gegeben. Ich habe diese auch selbst ausprobiert. Klappt also super. Hat vielleicht jemand noch weitere Befehle? Schreibt sie einfach in den Kommentar und sagt mir was man damit machen kann. Vielleicht hilft es ja dem Einen oder Anderen.

Weitere Befehle

Leider habe ich selbst das Gerät nicht mehr, und kann die Befehle nicht mehr testen, aber in den Kommentaren sind interessante neue Funktionen aufgetaucht. Es lohnt sich hier weiter zu lesen.

Brother MFC-9140CDN verknittertes Papier und Druckfehler

Hallo Leute,

heute nur eine kurze Fehlermeldung und wie die Lösung dazu ist.

Das Problem

Seit einiger Zeit hat mein Drucker das Papier nur noch verknittert ausgegeben. Dabei handelte es sich um einen ca 2-4 cm großen Streifen. Das Knittermuster hat sich dabei wiederholt.

Brother MFC-9140CDN Druckfehler auf einem schwarzen Papier

Brother MFC-9140CDN: Der Scann eines Ausdrucks. Druckfehler bzw. Knitterstellen sind als Weiße Kanten erkennbar.

Brother MFC-9140CDN Verknittertes Papier

Brother MFC-9140CDN Verknittertes Papier nach ausdruck

Die Lösung

Nach ellenlanger Diskussion mit dem Brother Support per Email (das wünsche ich keinem). Sind diese zum Schluss gekommen, dass ein Techniker vorbei kommt und die Heizung austauscht. Nachdem er mir diese Heizeinheit gezeigt hab, weiß ich auch warum.

MFC-9140CDN Defekte Heizeinheit

MFC-9140CDN Defekte Heizeinheit

MFC-9140CDN Defekte Heizeinheit

MFC-9140CDN Defekte Heizeinheit

Auf Nachfrage beim Techniker, ob sowas wohl öfter vorkomme, hat mir dieser erzählt, dass sie bei den neuen Modellen im letzten Jahr jetzt schon mehr Heizeinheiten getauscht haben als die letzten 3 Jahre vorher bei den alten Geräten. Es wird wohl eine neue Beschichtung eingesetzt, die sich von der schwarzen beheizten Rolle (schwarz unten) auf die rote Anpressrolle ablöst. Dadurch kommt es zu Druckfehlern.

Wer also die selben Symptome hat, sollte auf einen wechsel der Heizung bestehen. Bei mir hats geholfen. Mal schauen wie lang die neue jetzt hält. Diese hat angeblich die bessere (alte) Beschichtung.

Update 29.12.2014: Ausgetauschte Heizeinheit nun auch defekt

Wuhu. Es hat nicht mal 3 Monate gedauert, da war auch die neue Heizeinheit defekt. Wiederum berichtete mir die Frau, die mir die Heizung dieses mal in Rekordzeit ausbaute, dass sie gerade eben auch noch bei einem anderen Kunden war, mit dem selben Problem.

Danke nochmal an Nenenene aus der Kommentarsektion: Durch deinen Tipp ging es mit dem Brother-Support diesmal schneller.

Ich kann für den Brother MFC-9140CDN definitiv KEINE KAUFEMPFEHLUNG aussprechen. Das nächste mal kommt mir ein echter Bürodrucker ins Haus.

Hier noch ein paar Bilder mit Details vom Fehler:

IMG_20150110_102252 IMG_20150110_102243

 

Update 19.06.2015: Erneut ausgetauschte Heizeinheit nun wieder defekt

Juhu endlich ist es so weit: Die Heizeinheit ist jetzt zum 3. mal kaputt gegangen, und dieses mal richtig krass. Aber endlich! 3x das selbe Teil innerhalb des Gewährleistungszeitraums defekt –> Ich krieg meinen Kaufpreis zurück. Juhu! Endlich ein neuer Drucker.

Übrigens hat der Hersteller keine Probleme gemacht. Der Hersteller verlangt zwar, die Tonerkartuschen mit einzuschicken, aber gerade wenn ihr Alternative Toner (keine Brother Toner) benutzt, solltet ihr das unterlassen und diese nicht mitschicken. Es lohnt sich die original Kartuschen vom Anfang auf zu heben.

Netzteil (DPS-386AP-1) für HP Designjet 5500ps reparieren

Halli Leute,

mit diesem Beitrag möchte ich kurz zeigen, wie ich den Plotter HP Designjet 5500ps mit dem Fehler „Boot Failed – Error: 1f50007 Hard Disk Failure“ reparieren konnte. Ich hoffe ich kann mit diesem Beitrag dem einen oder anderen Bastler weiterhelfen.

Ich möchte an dieser Stelle anmerken: Bei der Reparatur musste ich an Teilen mit Netzspannung arbeiten. Achtung! Hier ist höchste Vorsicht geboten. Bitte nur machen, wenn ihr mehr oder weniger Ahnung habt, was zu tun ist!

Das Problem

Als ich den Plotter HP Designjet 5500ps in die Finger bekommen habe, hat dieser folgenden Fehler angezeigt:

Boot Failed – Error: 1f50007 Hard Disk Failure

Fehler Designjet 5500ps

Fehler Designjet 5500ps: Boot Failed – Error: 1f50007 Hard Disk Failure

Nach ein wenig Recherche im Internet, konnte ich folgende Fehlerquellen finden:

  • Festplatte defekt: Dies kann man ganz einfach prüfen, indem man die Festplatte austauscht. Das System sollte dann die neue Festplatte wieder formatieren und das System sollte starten.
  • Netzteil defekt: Man muss den Stromanschluss für die Festplatte überprüfen. Es sollten jeweils die Spannungen 5V und 12V anliegen.
  • Platine defekt: Wenn das der Fall ist, lohnt es sich wohl nicht mehr, den Drucker zu reparieren.

Als ich die Punkte bei dem vorliegenden Plotter geprüft habe, hat sich herausgestellt, dass zwar 5V an der Festplatte ankommen aber die 12V komplett fehlen. Alles klar: Netzteil defekt.

Das Netzteil

Delta Electronics Netzteil: DPS 386AP-1B

Delta Electronics Netzteil: DPS 386AP-1B

Das Netzteil ist ein Delta Electronics DPS 386AP-1B. Lasst euch nicht von dem „PC-Anschlussstecker“ täuschen. Das Netzteil bringt komplett andere Spannungen und kann nicht einfach durch ein normales Computernetzteil ersetzt werden. Folgende Spannungen werden durch das 300W Netzteil geliefert:

  • +3,3V mit 6,25A
  • +5V mit 1A
  • +12V mit 0,5A
  • +24V mit 4A
  • +36V mit 4,8 A
  • -15V mit 0,025A

Beim Analysieren des Steckers konnte ich folgende Steckerbelegung feststellen:

Steckerbelegung DPS 386AP-1B

Steckerbelegung DPS 386AP-1B

Zusammen mit einem Freund habe ich das Netzteil komplett durchgeschaut. Die Spannungen 36V, 24V und 12V kommen nicht mehr am Stecker an. Die restlichen Spannungen werden noch sauber erstellt. Wir haben zwar das Netzteil untersucht, konnten aber keinen Fehler feststellen.

Die Lösung

Achtung, jetzt wirds schmutzig. Natürlich könnte man das Netzteil einfach austauschen und gut ist (Achtung: Es gibt zwei verschiedene Versionen, achtet darauf, wieder ein 300W Netzteil zu bekommen). Das Netzteil ist aber sehr teuer und man bekommt diese nur gebraucht.

3 Netzteile ersetzen die fehlende Spannung

3 Netzteile ersetzen die fehlende Spannung

Statt das komplette Netzteil zu ersetzen, habe ich in dieser Lösung 3 Netzteile eingebaut die die Spannungen mit der entsprechenden Stromstärke liefern. Es ist alles andere als schön, aber die Lösung ist billig und man muss nur ein wenig basteln. Die Netzteile habe ich bei folgendem Verkäufer recht günstig bekommen:

Die nötigen Stromstärken für die Spannungen sind auf der Leiterplatine unten rechts aufgedruckt. Leider haben zwei Netzteile innen keinen Platz gefunden. Die Lösung sieht dann wie folgt aus:

Das reparierte Netzteil

Das reparierte Netzteil

Das kleine 12V-Netzteil kommt nach innen, das 24V und 36V kommen außen drauf. Alle Stromführenden Leitungen sind isoliert und/oder abgedeckt.

Bitte beachtet: Die Reparatur wurde von mir privat durchgeführt. Ich bin mir sicher, das es nicht 100% korrekt installiert ist. Auf dem Bild fehlen auch die Abdeckungen für die äußeren Netzteile. Diese sind natürlich nochmal abgedeckt, damit man nicht an die Stromführenden Leitungen kommt. Bitte nur nachmachen, wenn man weiß, was man macht.

Vollständige URLs in Dataflow exportierten CSV-Dateien von Magento

Hallo Leute,

Preisvergleichsportale sind ein gutes Mittel um kontrolliert Kunden auf seinen Onlineshop los zu lassen. Dazu nötig ist aber eine CSV-Datei, die alle nötigen Daten enthält. Dies kann man erreichen, indem man sich entweder teure Plugins kauft oder die etwas komplizierte Funktion von Magento nutzt. Es gibt dabei allerdings ein kleines Problem, welches ich mit diesem Beitrag lösen möchte.

Das Problem

Das Problem auf welches ich beim Export von Produktdaten in eine CSV-Datei gestoßen bin: Wenn man die URL zu Produktbildern in der exportierten CSV-Datei haben möchte, wird nicht die vollständige URL angezeigt, also:

p/r/produkt.jpg

statt

https://website.de/media/catalog/product/p/r/produkt.jpg

Die Lösung

Die Lösungsidee klingt simpel: Ich möchte einen Prefix-String vor die Ausgabe schreiben. Klingt einfach, aber benötigt ein wenig Arbeit am Quelltext.

Zunächst muss eine eigenes MapperModel geschrieben werden. Erstellt dazu eine Datei und die fehlenden Ordner in

app/code/local/Mage/Dataflow/Model/Convert/Mapper/MyColumn.php

mit folgendem Inhalt:

<?php
class Mage_Dataflow_Model_Convert_Mapper_MyColumn extends Mage_Dataflow_Model_Convert_Mapper_Column
{
    public function map()
    {
        $batchModel  = $this->getBatchModel();
        $batchExport = $this->getBatchExportModel();

        $batchExportIds = $batchExport
            ->setBatchId($this->getBatchModel()->getId())
            ->getIdCollection();

        $onlySpecified = (bool)$this->getVar('_only_specified') === true;

        if (!$onlySpecified) {
            foreach ($batchExportIds as $batchExportId) {
                $batchExport->load($batchExportId);
                $batchModel->parseFieldList($batchExport->getBatchData());
            }

            return $this;
        }

        if ($this->getVar('map') && is_array($this->getVar('map'))) {
            $attributesToSelect = $this->getVar('map');
        }
        else {
            $attributesToSelect = array();
        }
        if ($this->getVar('prepend') && is_array($this->getVar('prepend'))) {
                $prepend = $this->getVar('prepend');
        } else {
                $prepend = array();
        }
        if (!$attributesToSelect) {
            $this->getBatchExportModel()
                ->setBatchId($this->getBatchModel()->getId())
                ->deleteCollection();

            throw new Exception(Mage::helper('dataflow')->__('Error in field mapping: field list for mapping is not defined.'));
        }

        foreach ($batchExportIds as $batchExportId) {
            $batchExport = $this->getBatchExportModel()->load($batchExportId);
            $row = $batchExport->getBatchData();

            $newRow = array();
            foreach ($attributesToSelect as $field => $mapField) {
                $prepend_2 = isset($prepend[$field]) ? $prepend[$field] : '';
                $newRow[$mapField] = isset($row[$field]) ? $prepend_2 . $row[$field] : null;
            }

            $batchExport->setBatchData($newRow)
                ->setStatus(2)
                ->save();
            $this->getBatchModel()->parseFieldList($batchExport->getBatchData());
        }

        return $this;
    }
}

Es handelt sich dabei um eine Kopie der Funktion map() aus der Datei /app/code/core/Mage/Dataflow/Model/Convert/Mapper/Column.php mit kleineren Anpassungen in Zeile 30-34 und Zeile 49-50. Im Grunde haben wir uns jetzt eine eigene Funktion geschaffen, der wir eine weitere Variable „prepend“ übergeben können, welche dann zu den Werten einer bestimmten Spalte hinzugefügt wird.

Nun müssen wir noch die Datei

app/code/core/Mage/Dataflow/Model/Convert/Profile/Collection.php

in das Verzeichnis

app/code/local/Mage/Dataflow/Model/Convert/Profile/Collection.php

kopieren und eine Zeile im Code anpassen (Achtung dazu muss ein weiterer Ordner hinzugefügt werden). Sucht nach folgender Passage im Code (müsste bei Zeile 165 sein):

 /** @var $varNode Varien_Simplexml_Element */
            foreach ($actionNode->var as $key => $varNode) {
                if ($varNode['name'] == 'map') {
                    $mapData = array();
                    foreach ($varNode->map as $mapNode) {
                        $mapData[(string)$mapNode['name']] = (string)$mapNode;
                    }
                    $container->setVar((string)$varNode['name'], $mapData);
                }  else {

und erweitert die if-Abfrage wie folgt:

 /** @var $varNode Varien_Simplexml_Element */
            foreach ($actionNode->var as $key => $varNode) {
                if ($varNode['name'] == 'map' || $varNode['name'] == 'prepend') {
                    $mapData = array();
                    foreach ($varNode->map as $mapNode) {
                        $mapData[(string)$mapNode['name']] = (string)$mapNode;
                    }
                    $container->setVar((string)$varNode['name'], $mapData);
                }  else {

Dies ist nötig, damit die Variable mit dem Namen „prepend“ auch aufgelöst wird.

Funktionsweise

Die Funktionsweise kann man am besten an einem Beispiel erklären. Ich habe dazu in der Administrationsoberfläche von Magento über System -> Import/Export -> Dataflow – Erweiterte Profile ein Profil angelegt.

2014-07-17 09_53_02-Erweiterte wiederkehrende Leistungen _ Import und Export _ System _ Magento Admi

 

Das erstellte Beispiel soll SKU (Artikelnummer), Artikelname und das Produktfoto in eine CSV exportieren.

<action type="catalog/convert_adapter_product" method="load">
	<var name="store"><![CDATA[2]]></var>
	<var name="filter/qty/from"><![CDATA[1]]></var>
	<var name="filter/qty/to"><![CDATA[999999999]]></var>
	<var name="filter/status"><![CDATA[1]]></var>
</action>

<action type="catalog/convert_parser_product" method="unparse">
	<var name="store"><![CDATA[2]]></var>
</action>

<action type="dataflow/convert_mapper_myColumn" method="map">
	<var name="map">
		<map name="sku"><![CDATA[Artikelnummer]]></map>
		<map name="name"><![CDATA[Artikelbezeichnung]]></map>
		<map name="image"><![CDATA[image]]></map>
	</var>
	<var name="prepend">
		<map name="image"><![CDATA[https://www.bier-kaufen.de/media/catalog/product]]></map>
	</var>
	<var name="_only_specified">true</var>
</action>

<action type="dataflow/convert_parser_csv" method="unparse">
	<var name="delimiter"><![CDATA[,]]></var>
	<var name="enclose"><![CDATA["]]></var>
	<var name="fieldnames">true</var>
</action>

<action type="dataflow/convert_adapter_io" method="save">
	<var name="type">file</var>
	<var name="path">var/export/bika/</var>
	<var name="filename"><![CDATA[products.csv]]></var>
</action>

Da vielleicht nicht jeder schon mit Dataflow-XML-Dateien gearbeitet hat, möchte ich dieses kleine Beispiel zerlegen und erklären. Die XML teilt sich in 5 Bereiche auf:

<action type="catalog/convert_adapter_product" method="load">
	<var name="store"><![CDATA[2]]></var>
	<var name="filter/qty/from"><![CDATA[1]]></var>
	<var name="filter/qty/to"><![CDATA[999999999]]></var>
	<var name="filter/status"><![CDATA[1]]></var>
</action>

<action type="catalog/convert_parser_product" method="unparse">
	<var name="store"><![CDATA[2]]></var>
</action>

In diesem ersten Bereich werden allgemeine Artikelfilter festgelegt. Als z.B.:

  • Es soll store=2 (der Shop den ich verwenden möchte) verwendet werden
  • Es sollen nur Artikel angezeigt werden, mit einem Lagerbestand von 1 bis 999999999
  • Es sollen nur Artikel angezeigt werden, deren status=1 (aktiv) ist.
<action type="dataflow/convert_mapper_myColumn" method="map">
	<var name="map">
		<map name="sku"><![CDATA[Artikelnummer]]></map>
		<map name="name"><![CDATA[Artikelbezeichnung]]></map>
		<map name="image"><![CDATA[BildURL]]></map>
	</var>
	<var name="prepend">
		<map name="image"><![CDATA[https://www.bier-kaufen.de/media/catalog/product]]></map>
	</var>
	<var name="_only_specified">true</var>
</action>

Hier ist nun der interessante Bereich, weswegen der ganze Aufwand getrieben wird. Die Map-Funktion mapped das Feld in der Datenbank auf das Feld in der CSV-Datei. In diesem Beispiel also:

  • Datenbankfeld  „sku“ wird auf die Spalte „Artikelnummer“ in der CSV gemapped
  • Datenbankfeld „name“ wird auf die Spalte „Artikelbezeichnung“ in der CSV gemapped
  • Datenbankfeld „image“ wird auf die Spalte „BildURL“ in der CSV gemapped

Bitte beachtet, dass hier unser eigener Mapper type=“dataflow/convert_mapper_myColumn“ statt dem normalen type=“dataflow/convert_mapper_Column“ verwendet wird.

In der zweiten Variable „prepend“ legen wir dann fest, dass das Feld „image“ noch zusätzlich den Prefix „https://www.bier-kaufen.de/media/catalog/product“ vorangestellt werden soll. Dies kann natürlich mit jedem anderen Feld auch gemacht werden.

<action type="dataflow/convert_parser_csv" method="unparse">
	<var name="delimiter"><![CDATA[,]]></var>
	<var name="enclose"><![CDATA["]]></var>
	<var name="fieldnames">true</var>
</action>

In diesem Teil der XML wird festgelegt wie die CSV-Datei aussehen soll. Also was als Separator verwendet werden soll, oder dass die erste Zeile die Spaltenbezeichnung sein soll.

<action type="dataflow/convert_adapter_io" method="save">
	<var name="type">file</var>
	<var name="path">var/export/bika/</var>
	<var name="filename"><![CDATA[products.csv]]></var>
</action>

Am Schluss legen wir dann nur noch fest, wo die Datei gespeichert wird. Wenn wir nun den Export starten, fällt eine CSV-Datei mit dem gewünschten Inhalt und einer kompletten URL beim Bild heraus.

Fazit

Ich finde es schade, dass Magento eine solche Funktionalität nicht schon von Haus aus mitbringt. Bei der Recherche einer Lösung bin ich auf viele Betroffene gestoßen. Die hier beschriebene Umsetzung ist leider auch nicht 100%-ig schön, weil wir die „Collection.php“ komplett mit einer Eigenen ersetzen. Wenn hier jemand bessere Lösungen hat, immer her damit :). Man sollte bei jedem Update von Magento zur Sicherheit prüfen, ob noch alles so funktioniert, wie gewollt.

Mir haben bei der Lösungsfindung zwei Blog- bzw. Stackoverflow-Beiträge geholfen:

  • http://stackoverflow.com/questions/21789380/magento-advanced-profiles-export-prepend-url-to-image-path um zu verstehen was geändert werden muss
  • http://www.magentocommerce.com/knowledge-base/entry/introduction-to-magento-dataflow um zu verstehen wie Dataflow arbeitet

Ich würde mich über Feedback sehr freuen 🙂 und hoffe dem einen oder anderen weitergeholfen zu haben.

Einzelne Owncloud Ordner können nicht mehr erreicht werden

Halli Leute,

hier eine kleiner Kurzbeitrag. Ich hatte folgendes Problem:

Ich habe zwei Ownclouds auf einem Server laufen. Die eine Owncloud ist über „Externer Speicher“ in der Anderen eingebunden. Nun hatte ich das Problem, das plötzlich das Sync-Tool im Windows nicht mehr weiter gesynct hat, bevor ich nicht den externen Speicher (also die zweite Owncloud) ausgebunden hab. Im Onlinetool tauchte die Ordner zwar auf, aber bei „Größe“ stand nur „?“ und man konnte nicht mehr in die Ordner gelangen.

Die Lösung des ganzen war eine Reindexierung der Daten:

php console.php files:scan --all

Durch diesen Befehl werden alle Daten neu indexiert. Leider sind aber meine Ownclouds etwas größer, weshalb das PHP-Script so viel RAM verschlungen hat, das das Skript irgendwann gekillt wurde. Die zweite Lösung:

  1. Auf die Datenbank einloggen
  2. In der jeweiligen Datenbank folgenden Befehl ausführen: TRUNCATE oc_filecache;

Dadurch wird der Datei-Cache in der Datenbank geleert und Owncloud baut diesen selbstständig wieder auf.

Dadurch konnte ich die Dateien wieder erreichen. Übrigens waren die Fehler die geworfen wurden:

  • Im Synctool (nachdem ich den Log aktiviert hatte):  ** error Strings:  („Interne Fehlernummer 1060 aufgetreten. 500 Internal Server Error“)
  • Online im Fehlerprotokoll: Resource not found.

Das Log im Synctool habe ich mit dieser Anleitung aktiviert: Wie aktiviere ich das Logging beim Owncloud Sync-Client

Ich hoffe mal ich kann dem einen oder anderen weiterhelfen.

Spamassassin mit Postfix unter Debian 7 Wheezy

Dies ist der zweite Teil in der Anleitung zu Postfix, also ist die Fortsetzung zu Postfix unter Debian 7 installieren. Diese Anleitung fügt nun den Spamfilter Spamassassin zu Postfix hinzu. Für mich war es auch das erste Mal, aber die Konfiguration ging schneller, als gedacht.

Spamassassin wird dabei so konfiguriert, dass Spam zwar als Spam markiert wird, aber keine Email gelöscht wird. Das Filtern übernimmt dann euer Mailprogramm.

Voraussetzungen

Ihr benutzt die neuste Version von Debian 7 und habt Postfix bereits installiert. Ob dies nach der oben genannten Anleitung geschehen ist oder nicht, ist zunächst egal.

Spamassassin installieren

Zunächst installieren wir uns Spamassassin:

aptitude update
aptitude install spamassassin spamc

Das war’s auch schon. Es werden natürlich viele benötigte Pakete mit installiert, aber der Overhead hält sich in Grenzen.

User mit beschränkten Rechten erstellen

Spamassassin läuft standardmäßig mit root Rechten. Da dies eine Sicherheitslücke ist und einfach zu beheben ist, erstellen wir zunächst einen eingeschränkten Benutzer und Gruppe:

groupadd -g 5555 spamd
useradd -u 5555 -g spamd -s /sbin/nologin -d /usr/local/spamassassin spamd
mkdir -p /usr/local/spamassassin/log
chown spamd:spamd -R /usr/local/spamassassin

Spamassassin konfigurieren

Die Konfigurationsdatei zu Spamassassin liegt unter /etc/default/spamassassin. Öffnet die Datei mit einem Editor eurer Wahl und passt die Konfigurationsdatei wie folgt an:

# /etc/default/spamassassin
# Duncan Findlay

# WARNING: please read README.spamd before using.
# There may be security risks.

# Change to one to enable spamd
ENABLED=1
SPAM_HOME="/usr/local/spamassassin"

# Options
# See man spamd for possible options. The -d option is automatically added.

# SpamAssassin uses a preforking model, so be careful! You need to
# make sure --max-children is not set to anything higher than 5,
# unless you know what you're doing.

OPTIONS="--create-prefs --max-children 5 --helper-home-dir ${SPAM_HOME} --username spamd"

# Pid file
# Where should spamd write its PID to file? If you use the -u or
# --username option above, this needs to be writable by that user.
# Otherwise, the init script will not be able to shut spamd down.
PIDFILE="${SPAM_HOME}/spamd.pid"

# Set nice level of spamd
#NICE="--nicelevel 15"

# Cronjob
# Set to anything but 0 to enable the cron job to automatically update
# spamassassin's rules on a nightly basis
CRON=0

Die Kommentare sollten alle Einstellungen bereits ausreichend erklären. Nun bearbeiten wir noch die Einstellungen von Spamassassin in /etc/spamassassin/local.cf
Ich habe hier nur die Teile aufgeführt, die ich aktiviert oder verändert habe. Wiedermal sollten die Kommentare alles erklären.

#   Add *****SPAM***** to the Subject header of spam e-mails
#
rewrite_header Subject *****SPAM*****

#   Save spam messages as a message/rfc822 MIME attachment instead of
#   modifying the original message (0: off, 2: use text/plain instead)
#
report_safe 0

#   Set the threshold at which a message is considered spam (default: 5.0)
#

required_score 2.0
#   Use Bayesian classifier (default: 1)
#
use_bayes 1

#   Bayesian classifier auto-learning (default: 1)
#
bayes_auto_learn 1

Das wars‘ auch schon mit der Konfiguration von Spamassassin. Nun muss lediglich Spamassassin noch in Postfix integriert werden.

Spamassassin in Postfix integrieren

Damit die Mails auch von Spamassassin „betrachtet“ werden können, müssen wir Postfix noch nicht konfigurieren. Dazu muss die Datei /etc/postfix/master.cf angepasst werden:
Der Eintrag

smtp      inet  n       -       -       -       -       smtpd

muss wie folgt ergänzt werden:

smtp      inet  n       -       -       -       -       smtpd
        -o content_filter=spamassassin

Am Ende der Datei noch folgendes ergänzen:

spamassassin unix -     n       n       -       -       pipe
        user=spamd argv=/usr/bin/spamc -f -e
        /usr/sbin/sendmail -oi -f ${sender} ${recipient}

Tada! Das wars. Nun nur noch alles neustarten und fertig ist unser System.

/etc/init.d/spamassassin restart
/etc/init.d/postfix restart

Spamassassin testen

Natürlich wollen wir jetzt auch gleich mal testen, ob Spam richtig erkannt wird. Beobachtet zunächst die Logdatei:

tail -f /var/log/mail.info

Nun senden eine Email an euren Mailserver mit folgendem Inhalt:

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

Die Mail wird dann von Spamassassin automatisch erkannt und mit *****SPAM***** deklariert. Achtung: Die üblichen Mailprogramme sortieren die Mails gleich automatisch aus.

Fertig. Nun läuft Spamassassin und Spam wird automatisch aussortiert. Spamassassin holt sich jede Nacht die neusten Regeln und hält sich selbst aktuell.

Wie immer würde ich mich über Kritik, Anregungen und Kommentare jeglicher Art freuen :).