profistart e-commerce blog

Brauchst du Hilfe in Prestashop, Odoo, Javascript, Angular, Smarty, PHP, Mysql oder Postgres Datenbanken?

profistart E-Business Professional Blog


Schreib uns eine E-Mail an: support(at)profistart.com
Wir werden die Lösung hier im profistart Blog posten

PROFISTART JAVASCRIPT | JS NEWS


  • 24.05.2017 | IT-Infrastruktur unabhängige Programmierung mit AWS Lambda und Node.js. Cloud Entwicklung ohne Leistungsnachteile am eigenen Standort. Konzentration nur auf die Anwendungsfunktionalitäten. Seit dem Start von AWS Lambda 2014 ist die serverunabhängige Programmierung mit Node.js sehr beliebt. Cloud-Anbieter bieten eigene Serverless-Dienste an. Zum Beispiel Google Cloud Functions, IBM OpenWhisk oder Microsoft Azure Functions.

  • 23.05.2017 | Load Balancing mit Node.js in NGINX und Docker: Entwickeln Sie einen Teil ihrer Software, die Sie isolierten in Behältern verpacken. Um Ihre Software zum laufen zu bringen, benötigen Sie nur noch die entsprechenden Bibliotheken. Die Softwarearchitektur arbeitet in Containern. Sie benötigen kein volles Betriebssystem mehr, um ihre Software zu testen.

  • 22.05.2017 | Neu JSON Feed ist ein Format wie RSS oder Atom. Es ist kompakter als XML. JSON Feed für besseres Lesen und Schreiben von Feeds und weniger Fehleranfälligkeit.

  • 19.05.2017 | Electron Entwicklung ist schneller, günstig und moderner, um Anwendungen für Linux, Windows und Mac Betriebssysteme zu entwicklen. Electron benutzt Node.js. Die Entwicklung mit Electron via Javascript, DOM API's, HTML5 und CSS Elementen gleicht der Entwicklung einer Webanwendung.

  • 18.05.2017 | D3.js Britecharts ist eine einfache und schnelle Möglichkeit, schöne visuelle Charts zu erstellen. D3.js Britecharts sind wiederverwendbar und fehlerfrei. Alle Komponenten werden mit grundlegenden Methoden für Legende Diagramm, Liniendiagramm, Balkendiagramm, Pinsel-Diagramm, Donut-Diagramm, Sparkline-Diagramm, Schritt-Diagramm, gestapelt Bereich Diagramm verwendet.

  • 17.05.2017 | Das intelligente JQuery Plugin Sticky Sidebar unterstützt mehrere Sidebars in einem und ist kompatibel mit IE9+, Firefox, Chrome und Safari. Sticky Sidebar ist responsive und passt sich automatisch der Bildschirmgröße an. Probiert die Vorteile des JQuery Plugins Sticky Sidebar aus!

Javascript jQuery Button verstecken einblenden und ausblenden von Feldern, Inhalten, Containern


Javascript jQuery Button zeigt versteckte div- span- oder p-tags an

Wie versteckt und zeigt man einen Container mit Javascript-Jquery-Framework?

Erster Start mit jQuery:
In der HTML-Datei im HEADER-Tag einfügen: <head><script> src="jquery-3.2.0.min.js"> </script></head> In der HTML-Datei im BODY-Tag einfügen: <div class='myfield'>Hallo, you pressed the button.</div> <button class='mybutton'>Button</button> In der HTML-Datei im BODY-Tag ganz unten einfügen: $( function() { $( ".myfield" ).hide(); $( ".mybutton" ).click( function() { $( ".mybutton" ).show(); } ); } ); Andere Möglichkeit: $( function() { $( ".mybutton" ).click( function() { $( ".mybutton" ).toggle(); } ); } );

Prestashop – class product.php


Prestashop Produkte, Produkt Mengen, Kombinationen, Attribute, Variationen

Öffne im Ordner classes die Klasse product.php
Gehe zur Zeile mit folgenden Inhalt: Hier überprüft Prestashop ob eine Variante gesetzt ist und die Varianten Verfügbarkeit gegeben ist.

if (!isset($combinations[$id_product])) $combinations[$id_product] = array(); if (isset($combinations[$id_product][$minimum_quantity])) return $combinations[$id_product][$minimum_quantity];

Hier holt sich Prestashop alle verfügbaren Variationen aus der MySql Datenbank

$sql = 'SELECT product_attribute_shop.id_product_attribute FROM '._DB_PREFIX_.'product_attribute pa '.Shop::addSqlAssociation('product_attribute', 'pa').' '.($minimum_quantity > 0 ? Product::sqlStock('pa', 'pa') : ''). ' WHERE product_attribute_shop.default_on = 1 ' .($minimum_quantity > 0 ? ' AND IFNULL(stock.quantity, 0) >= '.(int)$minimum_quantity : ''). ' AND pa.id_product = '.(int)$id_product; $result = Db::getInstance()->getValue($sql); $combinations[$id_product][$minimum_quantity] = $result; return $result;

Kategorie Navigation Menü - Smarty blockcategories.tpl und category-tree-branch.tpl


Prestashop Kategorie Navigation Menüpunkte einblenden / eingeblendet lassen

Lösung: Öffne in Prestashop in /themes/modules/blockcategories das Smarty Template blockcategories.tpl und füge unten in blockcategories.tpl folgenden Javascript (JQuery) Code ein:

<script> $(document).ready(function() { var tg_cats = window.location.pathname.substring(1); if(tg_cats == "1005-kategoriename-profistart"){ $( ".grower" ).removeClass( "CLOSE" ); $( ".grower" ).addClass( "OPEN" ); $( ".tg_geoeffnet" ).show(); }else{ $( ".grower" ).removeClass( "OPEN" ); $( ".grower" ).addClass( "CLOSE" ); $( ".tg_geoeffnet" ).hide(); } }); </script>

Schritt: Nun öffne in Prestashop in /themes/modules/blockcategories das Smarty Template category-tree-branch.tpl und ergänze in Zeile 33 den ul-Tag mit folgender Klasse.

... <ul class="tg_geoeffnet"> ...

Beschreibung: Der Javascript Code liest die aktuelle URL deiner Webseite aus und mittels JQuery wird der Kategoriename abgeglichen. Wenn der Kategoriename zutrifft, öffnet (sichtbar) JQuery automatisch die ausgeblendeten Menüpunkte in der Navigation.

Smarty Templates – PHP Smarty Array print_r


Wie kann ich den Inhalt eines PHP Arrays in Smarty Template ausgeben lassen?

Erstelle und übergebe ein PHP Array in dein Smarty Template wie im folgendem Beispiel.

<?php $php_array = array("profi" => "success", "start" => "solution"); $smarty->assign('smarty_template_array',$php_array);

Öffen dein Smarty Template und gebe dein PHP Array wie folgt im Smarty Template aus, z.B. um den Inhalt zu kontrollieren.

{$smarty_template_array|print_r}

Öffne dein Browser und tippe die Adresse deiner Webseite ein.

Prestashop Smarty Templates product.tpl – Preis Anzeige zzgl. MwSt. / inkl. Mwst.


Wie kann ich in Prestashop mit oder ohne Mehrwertsteuer bzw. Brutto oder Netto Betrag anzeigen?

Um in Prestashop die Mehrwertsteuer auszuweisen bzw. komplett auszublenden, gehen Sie in das folgende Smarty Template: /themes/deinTheme/product.tpl (~ Zeile 300)

{if $priceDisplay >= 0 && $priceDisplay <= 2} <span id="our_price_display" class="price" itemprop="price" content="{$productPrice}" style="margin-left:-20px">{convertPrice price=$productPrice|floatval}</span> {if $tax_enabled && ((isset($display_tax_label) && $display_tax_label == 1) || !isset($display_tax_label))} <!-- {if $priceDisplay == 1} {l s='tax excl.'}{else} {l s='tax incl.'}{/if} --> {/if} <meta itemprop="priceCurrency" content="{$currency->iso_code}" /> {hook h="displayProductPriceBlock" product=$product type="price"} {/if}

Die IF-Bedinung für inkl. MwSt. oder zzgl. Mehrwertsteuer (MwSt.) auskommentieren, um zzgl. MwSt. oder inkl. MwSt. komplett auszublenden. Im Prestashop Backend kann unter Kunden > Gruppen eingestellt werden, ob zzgl. MwSt. oder inkl. MwSt. angezeigt werden soll.

Prestashop – PDF Rechnung und Smarty Template Vorlagen


Prestashop PDF Rechnungsvorlagen mit Smarty Templates

Alle Rechungen von Prestashop liegen als Smarty Template File (.tpl) im root Verzeichnis im Ordner /pdf/. Die wichtigsten Templates für Ihre Rechnungen sind /invoice.tpl, /invoice-b2b.tpl. Diese Smarty Templates enthalten Bestellinformationen wie Produkt, Anzahl, Preis etc. Weitere wichtige Rechnungsvorlagen sind /header.tpl und /footer.tpl. Wie der Name schon hinweisst, sind das der Kopf- und Fußbereich der Rechnung, indem Logo Anschrift etc. der Firma hinterlegt sind. Ebenfalls wichtig für Prestashop PDF Rechnungen und Rechnungsvorlagen, ist das Smarty Template invoice-addresses-tab.tpl, darin sind die Kundeninformationen der PDF Rechnung zu finden.

Smarty Templates – SmartyBC Vergleich Smarty Klasse


Der grundlegende Unteschied zwischen der SmartyBC und Smarty Klasse ist:

SmartyBC ist abwärtskompatibel und unterstützt PHP-Befehle innerhalb der {php} {/php} Tags im Smarty Template.

<?php //Smarty Klasse require_once('path/to/smarty/libs/Smarty.class.php'); $smarty = new Smarty(); //SmartyBC Klasse require_once('path/to/smarty/libs/SmartyBC.class.php'); $smarty = new SmartyBC(); ?> //Im Smarty Template z.B. smarty_template.tpl PHP wie folgt ausführen {php} echo "Hier ist PHP"; print_r("Hier ist die PHP print_r() Funktion."); var_dump("Hier ist die PHP var_dump() Funktion."); {/php}

Prestashop – Navigation DropDown Menü blockuserinfo nav.tpl


Wandeln Sie in Prestashop Ihre Navigation für den Kundenbereich in ein DropDown Menü um

Lösung: Öffnen Sie das Smarty Template nav.tpl im Modul blockuserinfo von Prestashop. Gehen Sie dazu in den folgenden Ordner: /themes/deinTheme/modules/blockuserinfo

Ersetzen Sie Zeile 7 bis 17:

<div class="header_user_info"> {if $is_logged} <a class="logout" href="{$link->getPageLink('index', true, NULL, "mylogout")|escape:'html':'UTF-8'}" rel="nofollow" title="{l s='Log me out' mod='blockuserinfo'}"> {l s='Sign out' mod='blockuserinfo'} </a> {else} <a class="login" href="{$link->getPageLink('my-account', true)|escape:'html':'UTF-8'}" rel="nofollow" title="{l s='Log in to your customer account' mod='blockuserinfo'}"> {l s='Sign in' mod='blockuserinfo'} </a> {/if} </div>

Durch folgenden Code:

<div class="header_user_info"> {if $is_logged} <div class="dropdown dropdown_after_before"> <a class="account" data-toggle="dropdown" href="#"><span class="wdt_li"><i class="icon-user"></i></span><span> {$cookie->customer_firstname} {$cookie->customer_lastname}</span></a> <ul class="dropdown-menu toggle_ddm" role="menu"> <li><a href="{$link->getPageLink('my-account', true)|escape:'html':'UTF-8'}" title="{l s='View my account' mod='blockuserinfo'}"><div class="wdt_li"><i class="icon-suitcase"></i></div> <div>{l s='Account' mod='blockuserinfo'}</div></a></li> <li><a href="{$link->getPageLink('history', true)|escape:'html':'UTF-8'}" title="{l s='Orders' mod='blockuserinfo'}"><div class="wdt_li"><i class="icon-list-ol"></i></div> <div>{l s='Orders' mod='blockuserinfo'}</div></a></li> <li><a href="{$link->getPageLink('addresses', true)|escape:'html':'UTF-8'}" title="{l s='Addresses' mod='blockuserinfo'}"><div class="wdt_li"><i class="icon-map-marker"></i></div> <div>{l s='Addresses' mod='blockuserinfo'}</div></a></li> <li><a href="{$link->getPageLink('identity', true)|escape:'html':'UTF-8'}" title="{l s='Information' mod='blockuserinfo'}"><div class="wdt_li"><i class="icon-info"></i></div> <div>{l s='Personal info' mod='blockuserinfo'}</div></a></li> <li><a href="{$link->getModuleLink('favoriteproducts', 'account', [], true)|escape:'html':'UTF-8'}" title="{l s='My favorite products.' mod='favoriteproducts'}"><div class="wdt_li"><i class="icon-star"></i></div> <div>{l s='Favoriten' mod='favoriteproducts'}</div></a></li> {capture assign="HOOK_USER_INFO"}{hook h="displayUserInfo"}{/capture} {if !empty($HOOK_USER_INFO)}{$HOOK_USER_INFO}{/if} <li class="divider style="background-color:#D3D3D3;">Tahsin Goekokus</li><li><a class="logout" href="{$link->getPageLink('index', true, NULL, "mylogout")|escape:'html':'UTF-8'}" rel="nofollow" title="{l s='Log me out' mod='blockuserinfo'}"><div class="wdt_li"><i class="icon-sign-out"></i></div> <div>{l s='Sign out' mod='blockuserinfo'}</div></a></li> </ul> </div> {else} <a class="login" href="{$link->getPageLink('my-account', true)|escape:'html':'UTF-8'}" rel="nofollow" title="{l s='Log in to your customer account' mod='blockuserinfo'}"> {l s='Sign in' mod='blockuserinfo'} </a> {/if} </div>

Prestashop – Admin Bestell E-Mail Sprachdatei fehlt


Wenn Sie eine Mail an Ihren Kunden senden möchten, ist ein Fehler aufgetreten Sprachdatei fehlt, indem Sie die Mail vom Backend in prestashop senden.

Lösung:

  1. Datei im folgenden Pfad: /themes /yourtheme /mails /yourlanguage /lang.php
  2. Kopiere die Datei lang.php in dein root-Verzeichnis /mails /yourlanguage/

Der Fehler tritt auf, weil die Sprachdatei in root / mails erwartet wird, aber die Sprachdatei in prestashop ist in / themes / mails / yourlanguage.

Prestashop – Warenkorb Button einblenden oder ausblenden im Smarty Template product.tpl


Wie blende ich den Warenkorb Button ein oder aus, wenn mein Shop aktiviert ist?

Lösung: Öffne das Smarty Template im Ordner /themes/meintheme/product.tpl
Im Smarty Template springe zur Zeile ~ 500 mit folgendem Inhalt

<div class="box-cart-bottom"> <div if (!$allow_oosp && $product->quantity <= 0) || !$product->available_for_order || (isset($restricted_country_mode) && $restricted_country_mode) || $PS_CATALOG_MODE} class="unvisible" /if > <p id="add_to_cart" class="buttons_bottom_block no-print"> <button type="submit" name="Submit" class="exclusive"> <span> if $content_only && (isset($product->customization_required) && $product->customization_required) l s='Customize' else l s='Add to cart' /if </span> </button> </p> </div> </div> <!-- end box-cart-bottom -->

Im ersten div-Tag wird nach Bedingung, die im Backend vom Prestashop eingestellt werden kann, der Warenkorb-Button ein- oder ausgeblendet. In diesem Fall zwischen den if-Tag mit class="unvisible"

Hier kann man die if-Bedingung komplett rauslassen oder andere Bedingungen im Prestashop Smarty Template product.tpl setzen.

Prestashop – Warenkorb Kasse Button im Bestellprozess ändern


Wie kann ich in Prestashop den Warenkorb Kasse Button Namen im Bestellprozess ändern?

  1. Öffne folgendes Smarty Template im folgenden Verzeichnis /themes /mytheme /shopping-cart-product-line.tpl
  2. Springe zum Ende des Smarty Templates
  3. Füge folgeden javascript (jquery) Code am Ende vom Smarty Template /themes /mytheme /shopping-cart-product-line.tpl ein
$( document ).ready(function() { $('.standard-checkout').empty().append(' weiter '); });

Odoo - EAN-13 Barcode mit Preis


Hier der richtige Code, um ein EAN Barcode mit Preis richtig ohne Fehler einzuscannen:

this.add_barcode_patterns(attributes.patterns || { 'product': ['xxxxxxxxxxxxx'], 'cashier': ['041xxxxxxxxxx'], 'client': ['052xxxxxxxxxx'], 'weight': ['31xxxxxNNNDDx'], 'discount': ['25xxxxxxxNNNx'], 'price': ['28xxxxxNNDDDx'], });

Prestashop – Attribut Variante Warnung product.tpl / product.js


Smarty Template-Pfad: prestashop/themes/yourtheme/product.tpl – Zeile ~ 220

Füge einen neuen span-Tag mit folgender ID ein:

{*{l s='Availability:'}*} quantity <= 0 && !$allow_oosp} class="warning_inline"{/if}> {if $product->quantity <= 0}{if $PS_STOCK_MANAGEMENT && $allow_oosp}{$product->available_later} {else} {l s='This product is no longer in stock'}{/if}{elseif $PS_STOCK_MANAGEMENT}{$product->available_now} {/if}

Javascript Template-Pfad: prestashop/themes/yourtheme/js/product.js – Zeile ~ 535

Am Ende der Funktion findCombination() vor der Funktion updateDisplay(), folgenden JQuery Code einfügen:

//Kombination nicht gefunden console.log("12. Combination nicht gefunden"); $("#variante_nicht").text("Variante nicht Verf&uuml;gbar"); $("#variante_nicht").css('display','block'); $('.box-cart-bottom').css('display','none'); updateDisplay();

Diese Stelle wird aufgerufen, wenn kein Produkt in Prestashop gefunden wurde. So kannst du an dieser Stelle beliebige Ausgaben einfügen, wenn keine Variante gefunden wurde.

Prestashop - Menge Verfügbarkeit Warnung product.tpl / product.js:


Wenn die Warnung letzte Menge verfügbar nicht mehr verschwindet, dann kopiere folgende Code Zeile ~ 595 in der Funktion findCombination() in der Javascript Datei product.js:

function findCombination() { if (!allowBuyWhenOutOfStock){ if (quantityAvailable <= maxQuantityToAllowDisplayOfLastQuantityMessage){ no_var_quantity = 0; } } ...

Erstelle eine Variable no_var_quantity mit default value 2. Setzte no_var_quantity am Ende von der Funktion findCombination() auf 1:

... no_var_quantity = 1; updateDisplay(); }

Prestashop Regristrierungsformular Authentifizierung authentication.tpl


Um in Prestashop in der Authentifizierung Pflichtfelder zu bestimmen öffne die PHP-Datei Address.php im Ordner classes (Zeile 107 - 134)

public static $definition = array( 'table' => 'address', 'primary' => 'id_address', 'fields' => array( 'id_customer' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false), 'id_manufacturer' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false), 'id_supplier' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false), 'id_warehouse' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false), 'id_country' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true), 'id_state' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId'), 'alias' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => true, 'size' => 32), 'company' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'size' => 64), 'lastname' => array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 32), 'firstname' => array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 32), 'vat_number' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => true,'size' => 50), 'address1' => array('type' => self::TYPE_STRING, 'validate' => 'isAddress', 'required' => true, 'size' => 128), 'address2' => array('type' => self::TYPE_STRING, 'validate' => 'isAddress', 'size' => 128), 'postcode' => array('type' => self::TYPE_STRING, 'validate' => 'isPostCode', 'size' => 12), 'city' => array('type' => self::TYPE_STRING, 'validate' => 'isCityName', 'required' => true, 'size' => 64), 'other' => array('type' => self::TYPE_STRING, 'validate' => 'isMessage', 'size' => 300), 'phone' => array('type' => self::TYPE_STRING, 'validate' => 'isPhoneNumber', 'size' => 32), 'phone_mobile' => array('type' => self::TYPE_STRING, 'validate' => 'isPhoneNumber', 'size' => 32), 'dni' => array('type' => self::TYPE_STRING, 'validate' => 'isDniLite', 'size' => 16), 'deleted' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'copy_post' => false), 'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDate', 'copy_post' => false), 'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate', 'copy_post' => false), ), );

Hier sind die Felder des Registrierungsformulars in Typ, Größe und Pflichtfeld bei der Authentifizierung definiert. Zum Beispiel wurde in Zeile 250 die vat_number (Steuernummer) mit "'required' => true" als Pflichtfeld definiert.

Prestashop – Bezahl Logo Visa Master und Attribute Auswahl aus der Produktseite entfernen


Wie kann man Attribut Auswahl aus der Produktseite entfernen?

  1. Im Themes Verzechnis
  2. Öffne das Smarty Template product.tpl
  3. Gehe in Zeile 347
  4. Im div-Tag (id=attributes)
  5. style=“display:none“ in den div-Tag einfügen

Wie entferne ich das Bild Block Visa Master Payment Logo?

  1. Login Backend
  2. Gehe zu Module
  3. Klicke auf Positions
  4. Deaktiviere Block Payment Logo im Hook

Aufgabe: Prestashop Module sent to a friend neues Feld hinzufügen


input text field oder textarea einfügen im Smarty Template /themes /mytheme /modules /sendtoafriend /sendtoafriend-extra.tpl (Zeile 64)

<p class="text"> <[label for="friend_comment"> {l s='Friend Comment' mod='sendtoafriend'}]> <[/label]> <[input id="friend_comment" name="friend_comment" type="text" value=""]> </p>

Erhalte deine id value in javascript /themes /mytheme /js /modules /sendtoafriend /sendtoafriend.js (Zeile 40)

var name = $('#friend_name').val(); var email = $('#friend_email').val(); var stf_comment = $('#friend_comment').val();

Setze deine id value in die ajax POST FunKtion (Zeile 54)

$.ajax({ url: baseDir + 'modules/sendtoafriend/sendtoafriend_ajax.php?rand=' + new Date().getTime(), type: "POST", headers: {"cache-control": "no-cache"}, data: { action: 'sendToMyFriend', secure_key: stf_secure_key, name: name, email: email, id_product: id_product, stf_comment: stf_comment }

Öffne die PHP-Datei /modules /sentoafriend /sendtoafriend_ajax.php (Zeile 50)

foreach ($friend as $key => $value) { if ($value['key'] == 'friend_name') $friendName = $value['value']; elseif ($value['key'] == 'friend_email') $friendMail = $value['value']; elseif ($value['key'] == 'id_product') $id_product = $value['value']; elseif ($value['key'] == 'friend_comment') $friendComment = $value['value']; } } else { $friendName = Tools::getValue('name'); $friendMail = Tools::getValue('email'); $id_product = Tools::getValue('id_product'); $friendComment = Tools::getValue('stf_comment'); }

(Zeile 77)

$templateVars = array( '{product}' => $product->name, '{product_link}' => $productLink, '{customer}' => $customer, '{name}' => Tools::safeOutput($friendName), '{friend_comment}' => Tools::safeOutput($friendComment) );

Aufgabe: Prestashop block newsletter


Prestashop Fehler: Sprachdatei nicht gefunden

Ich hatte dieses Problem, vielleicht mit eigenen Theme. Die Sprachdatei fehlt im Prestashop, indem sie das Register für den Newsletter sendet. Die Bestätigungs-E-Mail kann nicht an den Kunden verschickt werden

Lösung: Setzen Sie in folgenden Pfad Ihre lang.php-Datei. In diesem Beispiel für die englische Sprache

  • /mails /en /lang.php
  • /yourtheme /mails /en /lang.php
  • /modules /blocknewsletter /mails /en /lang.php
  • /themes/yourtheme /modules /blocknewsletter /mails /en /lang.php

Prestashop - Produkt in dieser Ausführung nicht verfügbar. Bitte wählen Sie eine andere Kombination


Produkt in dieser Ausführung nicht verfügbar. Bitte wählen Sie eine andere Kombination.

Um diese Warnmeldung zu Umgehen die folgenden Schritte befolgen:

  • Javascript Verzeichnis: /themes/default-bootstrap/js/product.js
  • Javascript Datei: product.js
  • Beheben: folgende Zeilen auskommentieren
  • Zeile: 507 - 510
  • alter Code: //this combination doesn't exist (not created in back office) selectedCombination['unavailable'] = true; if (typeof(selectedCombination['available_date']) !== 'undefined') delete selectedCombination['available_date']; updateDisplay();
  • neuer Code: //this combination doesn't exist (not created in back office) /*selectedCombination['unavailable'] = true; if (typeof(selectedCombination['available_date']) !== 'undefined') delete selectedCombination['available_date'];*/ updateDisplay();
  • Ergebnis: Keine Warnmeldungen mehr - diese Variante nicht verfügbar.

Vorfall: Prestashop imagecreatetruecolor()


Fehler: Der Grund für den fatalen Fehler in Prestashop ist, dass gd für php5 installiert sein muss.

Lösung:

  1. Check deine php Einstellungen mit phpinfo()
  2. Suche nache gd
  3. sudo apt-get install php5-gd
  4. sudo service apache2 restart

Vorfall: Prestashop Produkt speichern Button


Prestashop Fehler: Das hinzufügen und speichern von Produkt Attributen Varianten ist nicht möglich im Prestashop Backend.

Das hinzufügen und speichern von Produkt Attributen Varianten wird nicht aktualisiert. Ab und zu manchmal funktioniert das hinzufügen und speichern von Produkt Attributen Varianten im Prestashop Backend.

Lösung:

https://www.prestashop.com/forums/topic/442145-cant-add-new-product-attributes/

Linux Ubuntu: Apache2 Webserver error.log


Wo ist die error.log Datei von Apache Webserver in Linux Ubuntu zu finden?

/var/log/apache2/error.log

JQuery OWL Carousel Responsive


Hier der funktionierende Code für den owl Carousel responsiv und getestet. Ebenso die CSS-DAtei und Javascript-Datei von GitHub:
https://github.com/OwlCarousel2/OwlCarousel2/tree/develop/dist

Download following files:
- dist/owl.carousel.min.js
- dist/assets/owl.carousel.min.css

>>>HTML <em>div class : owl-carousel my Image Link my Image Link my Image Link my Image Link my Image Link my Image Link my Image Link div </em> >>>JAVASCRIPT <em>$(document).ready(function() { var owl = $('.owl-carousel').owlCarousel({ itemsCustom : [ [0, 2], [450, 3], [680, 4], [900, 5], [1000, 6], [1200, 7], [1400, 8], [1650, 10] ], autoPlay : 5000, stopOnHover : true, navigation : true, navigationText : ["<",">"], loop:true, center: true, autoplay:true, autoplayTimeout:1000, autoplayHoverPause:true }) });</em>

Prestashop Bilder JPG JPEG PNG GIF


Prestashop: Die Bilder sind in der MySql Datenbank in den Tabellen ps_image und ps_image_shop zu finden
Alle Bilder sind in der MySql Datenbank in den Tabellen ps_image und ps_image_shop verknüpft. Die Bilder sind mit den Produkten über die ID's id_image und id_product verknüpft. In der Tabelle ps_image_lang sind Namen und Beschreibungen der Bilder zu finden.

Prestashop CSV Import


Wichtige Punkte für den Import von CSV-Import in Prestashop:

  1. Kategorie Import
  2. Artikel Import
  3. Attribut / Varianten Import

Kategorien mit CSV-Datei importieren:

  • Wichtig ist die Kategorie ID
  • Sehr wichtig sind die Kategorie Eltern ID s (Unter-/Üeberkategorien)
  • Die Kategorien können über den Namen oder ID import werden
  • Benutze keine Sonderzeichen beim CVS-Import in den Kategorienamen

Artikel Produkte mit CSV-Datei importieren:

  • Wichtig ist die Artikel Produkt ID
  • Sehr wichtig sind die Kategorie ID s
  • Du kannst in der Spalte Kategorie den Kategorienamen oder die Kategorie ID benutzen
  • Benutze keine Sonderzeichen beim CSV-Import in den Artikel Produktnamen
  • Wenn du die CSV-Import Option utf-8 wählst, kannst du HTML-Tags in den Beschreibungen benutzen

Varianten Attribute mit CSV-Datei importieren:

  • Benutze die Artikel Produkt ID s um die Attribute den richtigen Artikeln Produkte zuzuordnen
  • Einen Range Controller kannst du leider nicht in Prestashop für beliebige Attribute einsetzen. Nur für Preise und Gewicht

Prestashop AdminTab Modul einfügen


Der einfachste Weg ist immer der beste Weg. The easiest way is the best way. Vergessen Sie Ihre Fähigkeiten als Entwickler nicht und halten Sie sich an in die objektorientierte Programmierung. So können Sie Ihr Prestashop-Modul in die Prestashop-Backend-Menüleiste auf der linken Seite integrieren.

Nach einigen Versuchen und suchen in Blogs, hier Ihre einfachste Lösung:

//get prestashop admintab class include_once(PS_ADMIN_DIR.'/../classes/AdminTab.php'); //get your module class include_once(PS_ADMIN_DIR.'/../modules/produkt/produkt.php'); /*extend the admintab and put in in the folder /admin/tabs/AdminProdukt.php*/ class AdminProdukt extends AdminTab { private $asp=NULL; //Sicherheit zuerst public function __construct() { //deine Modul Klasse $this->asp = new Produkt(); //AdminTab Klasse aufrufen parent::__construct(); } public function display() { //bester weg um den Inhalt auszugeben echo $this->asp->getContent(); } }

XDebug Eclipse Mars PHP


Wie funktioniert PHP Remote-Debugging mit XDebug und Eclipse Mars Web-Anwendung?

  1. Download xampp with apache und mysql
  2. php.ini einstellen: [XDebug] xdebug.remote_enable=true xdebug.remote_host=127.0.0.1 xdebug.remote_port=9000
  3. Restart Webservice (xampp)
  4. Gehe zur xdebug Seite und kopiere deinen Quellcode im Textbereich und folge folgende Schritte:      https://xdebug.org/wizard.php
  5. Öffne Eclipse Mars
  6. Gehe zu Register Run - Debug Einstellungen a. Erstelle eine neue PHP Web Applikation b. Registriere Server - Default PHP Web Server - File - your PHP Project c. Debugger - Einstellung - Debugger - XDebug - Port 9000
  7. öffnen Sie Google Chrome Browser Installieren Sie Free XDebug Addon für Google Chrome. Jetzt kannst du ein Bug Icon auf der rechten Seite wie Bild sehen.
  8. Aktiviere XDebug via Icon
  9. Gehe zu Eclipse, setze Breakpoints am linken Rand mit Doppelklick und starte Debugging Schritt für Schritt
  10. Viel Spaß beim Debugging und Coding!

Zweiter Server: Starte Remote PHP SQL Query


Für mich ist die einfachste Lösung für dieses Problem / Problem die PHP-Funktion file_get_contents ()
Um eine Menge Problem zu vermeiden, erstellen Sie eine Datei auf dem Server mit mysql-Datenbank.

Schreiben Sie etwas aus, legen Sie ein, oder fügen Sie Abfragen normal ein Mysqli- connect und mysqli-query
("SELECT * FROM testtab WHERE testcol = 'yours'") oder mysqli-query("INSERT INTO testtab...).
Geben Sie die Abfrage mit print_r () oder Echo aus.
Erstellen Sie eine neue Datei auf einem anderen Server, in dem Sie die Abfragen ausdrucken möchten.

Verwenden Sie die PHP-Funktion file_get_contents
('Der Pfad der Abfrage-Datei') und bekomme die Zeichenfolge aller print_r () oder Echos aus der Abfragedatei in deine neue Datei.
Auch brauchst du die PHP-Funktionen utf8_decode () und utf8_encode () um Sonderzeichen richtig darzustellen.

Smarty Templates Example


Hier ein einfaches Beispiel für smarty Vorlagen mit. Bevor Sie mit smarty Vorlagen beginnen, besuchen Sie bitte die Homepage von smarty, um etwas über das smarty Framework / Motor zu lernen:  http://www.smarty.net/


<HTML> <DIV CLASS=“ONEDIV“>{$MYVARIABLE}</DIV> <DIV CLASS=“ANOTHERDIV“> {IF $CHOOSE EQ ‚FIRST‘} <DIV CLASS=“INSIDEDIVONE“>HELLO</DIV> {ELSEIF $CHOOSE EQ ’SECOND‘} <DIV CLASS=“INSIDEDIVTWO“>HOW ARE YOU?</DIV> {ELSE} <DIV CLASS=“INSIDEDIVTHREE“>NO</DIV> {\IF} </DIV> </HTML><PHP> $MYVARIABLE = ‚A SIMPLE SHORT EXAMPLE FOR SMARTY ENGINE‘, $CHOOSE = ‚FIRST‘; </PHP>

Joomla 2.5.14 Umzug 1und1


Nachdem ich für einen Kunden die Webseite basierend auf Joomla 2.5.14 auf ein 1und1 Server umgezogen habe, will ich euch die Problemlösungen nicht vorenthalten. Ich habe 2 Stunden auf diversen Hilfeseiten und Foren nachgeschlagen, die den Fehler bei Aufruf der Seite...

"Der Server meldet einen internet Fehler oder eine falsche Konfiguration. Deswegen ist es nicht möglich die Anfrage zu bearbeiten. Bitte kontaktieren sie den Server Administrator und informieren sie ihn über den Zeitpunkt des Fehlers. Teilen Sie dem Server Administrator bitte mit was sie bearbeitet haben, dass zu dem Fehler geführt haben könnte. Mehr Informationen über diesen Fehler können sie eventuell im Error Log erhalten. Ein 500 Internal Server Error error Fehlerseite tritt auf, wenn kein Error Dokument im .htaccess hinterlegt wurde.

Die meistens Tipps zur Lösung auf den Hilfeseiten und Foren gehen in die selbe Richtung, also nochmal hier kurzgefasst:
  • php.ini bearbeiten: den "allow_url_fopen" auf "on" stellen (Zeile einfügen: allow_url_fopen=on)
  • configuration.php bearbeiten: ganz wichtig - hier Datenbankeinstellungen und Pfade anpassen!
  • .htaccess bearbeiten: deaktivieren oder folgende Einträge einfügen:

    AddType x-mapp-php5.php
    AddHandler x-mapp-php5.php
  • Benutzer- und Gruppenrechte bearbeiten: laut Internet dürfen nicht alle auf Ordner und Dateien komplette Zugriffsrechte vergeben werden
  • Die Lösung:

    Ich habe für Google Chrome über Tools die kostenlose Erweiterung von https://chrome.google.com/webstore/detail/web-developer-joomla/kccpfcmcfhpdgkeadjmdkgjbebphnemk?hl=de heruntergeladen. Damit konnte ich auch mehr als nur die Startseite von Joomla erreichen. Ich habe mich eingeloggt und bin anschließend unter "Konfiguration" im Reiter "Sites" unter "Suchmaschinenoptimierung" das "URL-Rewrite nutzen" auf "Nein" gestellt. Das wars :) !

    Noch ein Tipp! Wenn Ihr schon an der Joomla Konfiguration seit, stellt gleich Version anzeigen auf "JA", damit Ihr beim nächsten mal Zeit sparen könnt.

php - header()


Wichtige Informationen für Entwickler: Senden von header () - Informationen lädt die Seite aufgrund der PHP-Funktionalität - Serverantwort und Anforderung. Wenn Sie mit Javascript arbeiten, ist dies nur onpage ohne Kommunikation zwischen Server und Client. Wenn du neue Seite und eine Kommunikation zum Server brauchst, musst du das mit PHP behandeln. Wenn Sie nur Inhalte in der gleichen Seite ändern, können Sie Javascript - nur Client-Website oder nur Server-Website verwenden.

Angular 2 für Anfänger


Angular 2 Model:

NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, FormsModule, HttpModule ], providers: [] }) export class AppModule { }

Angular 2 Komponente:

Component({ template : `<div>Willkommen zur Einf&uuml;hrung von Angular 2</div>` })

Angular 2 init Model:

platformBrowserDynamic().bootstrapModule(AppModule);

Angular 2 init Event Listener:

Component({ selector: 'profistart-root', template: `<textfield (keyup)="onKeyUp()" (textfield)="color=$event.target.value" [style.background-color]="color">` }) export class AppComponent { public color: string; onKeyUp() { console.log('keyup: ' + this.color) } }

Angular 2 Direktive:

Component({ selector: 'profistart-root', template : `<textfield´ [(ngModel)]="content" > <p>Inhalt</p>` }) export class AppComponent {}

Angular 2 Model View Schnittstelle:

Component({ selector: 'profistart-root', template: `<span>Hallo ich bin eine Komponente</span>` })

Angular 2 Ansicht Temlate:

<div class="container"> <profistart-root> </profistart-root> </div>

Mehr Beispiele: stackoverflow.com/questions/38103920/how-to-use-javascript-functions-in-an-angular-2-component-from-a-different-file

Angular - get scope from other controller


Wie bekomme ich $scope von anderen Controller in Angular
Der einfachste Weg ist immer der beste Weg. Wenn du zwei oder mehr Controller hast und du gerne den Umfang eines Controllers mit einem anderen Controller aktualisierst, brauchst du eine übergeordnete Kinderstruktur, sonst kannst du den Umfang eines anderen Controllers nicht aktualisieren. Ein weiterer Weg, um Service in Angular zu teilen ist die Fabrik Methode. Zurück zur übergeordneten Kindstruktur im Winkel. Wenn ein Controller der übergeordnete Controller ist, können Sie einfach den Umfang des übergeordneten Controllers mit dem untergeordneten Controller wie folgt ändern:

Javascript Angular:
anstatt : $scope.variable = data;
$scope.$parent.variable = data;

<div ng-controller="ParentCtrl"> <div ng-controller="ChildCtrl"></div> </div>

Microsoft Windows rundll32.exe


Heute hatte ich ein Problem mit meinem Microsoft Windows 7 System. Die Aufgabe rundll32.exe verwendet min. 50% meiner CPU Also habe ich angefangen, den Grund für diesen anormalen Unterschied zur Vergangenheit auszuprobieren. Schnell und schnell von Task-Manager fand ich den Grund: rundll32.exe

Ein Benutzer im Internet hatte das gleiche Problem. Es scheint, dass Microsoft Daten von Windows-Benutzer sammelt. Seit Windows 10 offiziell. Für mich ist es kein Problem für meinen privaten Computer zu Hause. Aber es ist ein Problem, wenn ich das System nicht nutzen kann, weil es verwendet wurde, um Daten an Microsoft zu übermitteln.

Die einfache Lösung für mein Problem war, check out Updates von Microsoft und deinstallieren Sie das Update KB2952664. Weitere Informationen finden Sie hier: http://www.winfuture-forum.de/index.php?showtopic=210145.

Windows 10


Seit dem 29. Juli ist Windows 10 auf dem Markt für jeden erhältlich. Auch gibt es von Microsoft fleißig Updates und jede Menge kleine Fehlerbehebungen. Mittlerweile verwenden bereits rund 60 Millionen Benutzer das neue Betriebssystem von Microsoft.

Damit Windows 10 richtig durchstarten kann, stellt Microsoft für viele Benutzer das Betriebssystem als kostenloses Update zur Verfügung.

Windows 10 soll das beste von Windows 7 und Windows 8 enthalten. Das Touchscreen optimierte Betriebssystem ist im Vergleich zu Windows 8 deutlich intuitiver und ist im Verbrauch von Ressourcen mit Windows 7 vergleichbar. "Cortana", der Sprachassistent ist jetzt auch in Windows 10 integriert. Windows 10 bietet mit DirectX 12 den Gamer eine deutlich bessere Nutzung der Hardware.

Unser Fazit: Nach der Klatsche mit Windows 8 für Microsoft, kann es mit Windows 10 nur bergauf gehen. Die Zeichen für Microsoft stehen gut.

phpStorm SVN Subversion Control Branches


Einfach branching mit phpStorm svn:

Mit phpStorm Subversion Control können Sie einfach in svn eine parallele Kopie Ihres Projekts erstellen.

Aktualisieren Sie Ihre Projektkopie aus dem Hauptprojekt, welches das ursprüngliche Arbeitsprojekt ist.

Nach svn update hast du die neueste Version (die aktuelle svn version) aus dem ursprünglichen projekt.

Arbeiten Sie mit Ihrem Projekt, die Kopie des Originals. Wenn du deine Entwicklung beendet hast, verschmelze dein

Projekt zum ursprünglichen Projekt. Das ist alles.

VCS - Subversion - Update Directory...
VCS - Subversion - Update File...

Wie bekomme ich eine E-Mail-Adresse von cleverreach


//apiKey cleverreach $apiKey = "b#797###e8f6###25#########40d63#-#"; $wsdl_url="http://api.cleverreach.com/soap/ interface_v5.1.php?wsdl"; //listId cleverreach $listId = "1####8"; $api = new SoapClient($wsdl_url); $page = 0; do{ $filter = array( "page"=>$page++, "filter"=>"all" //active, inactive, bounce ); $return = $api->receiverGetPage($apiKey, $listId, $filter); if($return->status=="SUCCESS") { for($i=0;$i < count($return->data);$i++){ var_dump($return->data[$i]->email); } }else{ //var_dump($return->message); } }while($return->data);

Postgresql Timestamp


Zeitunterschied in Postgresql Timestamp Format

SELECT "Timestamp", "column", "column" FROM "Database"."Table" WHERE "Timestamp" &gt; CURRENT_TIMESTAMP - INTERVAL '20 hours' ORDER BY "Timestamp" DESC

c3 Charts javascript config width


Ändern Sie die Breite von c3.js-Diagrammen, fügen Sie bitte folgende Methode für c3Config in Javascript ein

var c3Config  =  { size: { width: <em>mywidth</em> }, ... }

Microsoft Internet Explorer changes name


Microsoft wird den Namen des Internet Explorers ändern. Vielleicht ist der Grund das Image vom Internet Explorer, das Microsoft gerne ändern möchte. Ein weiterer Grund kann ein neuer Explorer ganz anders sein wie der alte Internet Explorer. Mehr Informationen über den neuen Namen und der Grund kommen bald...

Smarty Templates


Wenn Sie ein einfaches leicht zu verstehen und lernen oder schnelles Content-Management-System suchen, dann sollten Sie es mit Smarty Template versuchen!

Smarty Engine Webseite - http://www.smarty.net

Angular MVC


Angular für besseren, kompakteren und servicefähigen Javascript-Quellcode
MVC trennt Modell und Controller, so dass Sie das Modell ändern können, ohne den Controller zu wechseln. Oder die Steuerung anpassen ohne Änderungem am Modell. Angular bietet mehr Features. Eines der neuen Angular-Funktionen ist die Aktualisierung der Seite in Echtzeit, ohne einen Knopf zu drücken. Zum Beispiel können auch Anwender die Webseite-Ansicht direkt durch Formulare ändern.

Cache deine Datenbank


Mehr Postgres, MySql Leistung
Für mehr Postgres, MySql Leistung ist eine gute Zwischenspeicherung der beste Weg, um Ihre Anfragen in der Anwendung zu beschleunigen. Postgres, MySql, Oracle Sie brauchen immer eine gute Caching-Basis, um Informationen aus Ihrer Datenbank in einer nutzbaren Weise zu verwenden.

Bootstrap responsive c3.js charts javascript


Bootstrap Framework
Die beste Lösung für reaktionsfähige Webseiten, vom Handy, Tablets, Monitor zum großen Display, ist Bootstrap. Bootstrap mit vielen Features in Kombination mit c3.js Charts Javascript ist ein Muss für jeden Web-Entwickler. Verwenden Sie opensource community github.

Javascript Framework Angular.js


Angular MVC
Angular.js ist ein sehr nützliches, weit verbreitetes und brand aktuelles Javascript Framework, das auf das MVC-Prinzip beruht. MVC steht für Modell-View-Controller.

Das MVC-Prinzip hebt die Kopplung zwischen Ansicht und Logik auf. Das ermöglicht eine modulare Programmierung, das leichter zu warten und anpassungsfähiger ist, da Veränderung nicht mehr am gesamten System vorgenommen werden müssen, sondern nur noch an den betroffenen Komponenten. Daher ist Angular.js perfekt für grosse Projekte.

Charts und Diagramme mit Javascript chart.js


Nick Downie hat mit Javascript charts.js entwickelt, die mit HTML5 CANVAS sehr schöne Diagramme und Charts auf der Webseite erstellt. Die Javscript-Bibliothek ist nur 4,5 KB groß. charts.js mit Javascript beinhaltet sechs verschiedene Diagrammtypen und ist übersichtlich und einfach zu implementieren.

Javascript Luhn Algorithmus


$(document).keypress(function(event) { switch(event.which) { case 13:{ $(‚#luhn‘).empty(); var wert = $(‚#knr‘).val(); var sum = 0; var length = wert.length; var parity = length % 2; // $(‚#luhn‘).append(‚ Ergebnis: ‚); $(‚#luhn‘).append(‚ Kartennummer: ‚ + wert + ‚ ‚); // $(‚#luhn‘).append(‚Parity: ‚ + parity + ‚ ‚); for (var i = 0; i < length; i++) { var digit = parseInt(wert.charAt(i)); // $(‚#luhn‘).append(‚Z&auml;hler: ‚ + i + ‚ ‚); // $(‚#luhn‘).append(‚1 Wert: ‚ + digit + ‚ ‚); if (i % 2 == parity) { digit *= 2; // $(‚#luhn‘).append(‚2 Wert: ‚ + digit + ‚ ‚); } if (digit > 9) { digit -= 9; // $(‚#luhn‘).append(‚3 Wert: ‚ + digit + ‚ ‚); } sum += digit; // $(‚#luhn‘).append(‚4 Wert: ‚ + digit + ‚ ‚); // $(‚#luhn‘).append(‚Summe: ‚ + sum + ‚ ‚); } if(sum == 0){ $(‚#luhn‘).append(‚Ung&uuml;ltige Nummer ‚); } if (sum % 10 == 0) { $(‚#luhn‘).append(‚Endwert: ‚ + sum + ‚ (richtig) ‚); } if (sum % 10 > 0) { $(‚#luhn‘).append(‚Endwert: ‚ + sum + ‚ (falsch) ‚); } if(!(sum % 10 == 0) && !(sum % 10 > 0)){ $(‚#luhn‘).append(‚Wert nicht erkannt ‚); } if(sum % 10 < 0){ $(‚#luhn‘).append(‚Wert kleiner Null ‚); } break;} default:{break;}

Html Javascript & JQuery


Das Rad muss nicht zweimal erfunden werden. JQuery in Javascript bietet viele Funktionen um eine moderne Seite aufzubauen.

$(document).ready(function(){ $('div').show(); });

Schnellere Webseite mit grunt and .less


Grunt verpackt dein Code, deine Dateien in eine kleinere Datei und spart somit die Ladezeit deiner Homepage. Verkleinerte JavaScript, Php, Html, Css Dateien mit grunt sind mit dem Namenszusatz .min zu erkennen.

Big Data und Datenverarbeitung


Wir liegen immer noch in Informationstechnologien als führender Industriestaat hinten. In Datenschutz ist der Staat immer noch ein offenes Buch für Hacker.

In Großstädten ist Dank Glasfaserkabel die übertragungsgeschwindigkeit stark gestiegen. Wir liegen immer noch in Informationstechnologien als führender Industriestaat hinten. In Datenschutz ist der Staat immer noch ein offenes Buch für Hacker.

Fazit: Wir begrüßen alle Subventionen!

Java Hadoop Big Data


Apache Hadoop ist ein sehr schneller und leistungsfähiger Algorithmus für die Speicherung großer Daten. Hadoop ist eines der erfolgreichsten Java Framework, das Daten zwischen den Knoten überträgt. Hadoop auch in Autos für mobile Datenübertragung und in Web-Anwendung, finanziell zu analysieren große Masse von Daten schnell. Hadoop ist das Werkzeug in Telematik, Thema Telekommunikation und Informatik.

CSS Stylesheet dynamisch mit Javascript einfügen


Hallo liebe Web-Developer,

wenn Ihr auf der Suche seit Eure Webseite dynamisch per Request dem Browser (Internet Explorer, Firefox, Opera, Safari) anzupassen, haben wir Neuigkeiten für Euch.

Microsoft verwendet seit Internet Explorer 11 nicht mehr bei der Abfrage mit der bekannten Javascript Objektmethode navigator.userAgent.toLowerCase() die Bezeichnung msie, Ihr müsst statt msie nach trident suchen.

Firefox verbleibt bei gecko/ und Safari ebenfalls wie gehabt.

Viele Grüße
Euer profistart Team