Created
May 17, 2012 22:56
-
-
Save Abromeit/2722140 to your computer and use it in GitHub Desktop.
Revisions
-
Abromeit revised this gist
May 18, 2012 . 1 changed file with 26 additions and 16 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -124,8 +124,10 @@ // ----------------------------------------------------------------------------- // noindex bei "unwichtigen" Seiten (bzw. Dateien) // ----------------------------------------------------------------------------- $script_basename = basename($_SERVER['SCRIPT_NAME']); $meta_robots = 'index,follow'; if( in_array($script_basename,$files_noindex) ) { $meta_robots = 'noindex,follow'; } @@ -137,7 +139,7 @@ // Wenn wir auf der Startseite sind, Metas aus der Index-Seite holen if( $script_basename==FILENAME_DEFAULT && empty($_GET['cat']) && empty($_GET['cPath']) && empty($_GET['manufacturers_id']) @@ -227,24 +229,32 @@ function metaTitle($allow_appended_shopname,$title) { global $metaTitleLength, $metaTitleSeparator; //remove elements that would be empty $title = array_filter((array)$title,'metaClean'); // append shopname if $title && shopname are not empty if( $allow_appended_shopname && !empty($title) && metaClean(ML_TITLE) ) { $title[] = ML_TITLE; } // join all that stuff $res_tmp = array(); foreach($title as $k=>$v) { // if element is already contained in our title if( !empty($res) && strpos($res,$v) !== false ) continue; $res_tmp[] = $v; $res = implode($metaTitleSeparator,$res_tmp); // if new title length exceeds our maximum if( $k > 0 && strlen($res) > $metaTitleLength ) //fixme: not that precise, see metaClean() { array_pop($res_tmp); $res = implode($metaTitleSeparator,$res_tmp); break; } } @@ -255,7 +265,7 @@ function metaTitle($allow_appended_shopname,$title) // ----------------------------------------------------------------------------- switch( $script_basename ) { // ----------------------------------------------------------------------------- -
Abromeit revised this gist
May 17, 2012 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -65,7 +65,7 @@ // ----------------------------------------------------------------------------- // Max.-Längen wirken sich nur auf automatisch generierte Teile aus. $metaTitleLength = 65; // Max. Länge des titles (Anzahl Buchstaben) - default: 65 $metaDesLength = 155; // Max. Länge der description (Anzahl Buchstaben) - default: 155 $metaTitleSeparator = ' - '; // Trennzeichen zwischen Title-Tag-Teilen -
Abromeit created this gist
May 17, 2012 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,606 @@ <?php /*--------------------------------------------------------------------------- $Id$ xtcModified - community made shopping http://www.xtc-modified.org Copyright (c) 2010 xtcModified ----------------------------------------------------------------------------- based on: (c) 2003 nextcommerce (metatags.php, v1.7 2003/08/14); www.nextcommerce.org (c) 2006 xt:Commerce (metatags.php, v.1140 2005/08/10); www.xt-commerce.de Released under the GNU General Public License ----------------------------------------------------------------------------- Modified by Gunnar Tillmann (August 2006) http://www.gunnart.de ----------------------------------------------------------------------------- AUTOMATISCHE METATAGS MULTILANGUAGE für xt:Commerce 3.04 ----------------------------------------------------------------------------- Version 0.97 / 16. Mai 2012 / D.Abromeit / Lucido Media GbR - Canonical-Tag Bugfix für Pagination - Title, Description, Robots: Diverse Änderungen nach aktuellen Empfehlungen - Keywords-Tag entfernt - Legacy Funktionen entfernt ----------------------------------------------------------------------------- Version 0.96n / 13. Dezember 2010 / DokuMan / xtcModified - Unterstützung für Pagination ----------------------------------------------------------------------------- Version 0.96m / 26. August 2010 / DokuMan / xtcModified - Unterstützung für "canonical"-Tag ----------------------------------------------------------------------------- Version 0.96 / 21. Juni 2009 - Umwandlung von Umlauten in Keywords statt in ae und oe JETZT in ä ö - "Bindestrich-Wörter" (z.B. T-Shirt oder DVD-Player) werden in den Keywords nicht mehr getrennt - Metatags auch für ContentManager-Seiten (Achtung! Dazu Erweiterung erforderlich!) - Im ContentManager können auch automatische Metatags aus eingebundenen HTML- oder Text-Dateien erzeugt werden - Standard-Meta-Angaben durch Content-Metas auch mehrsprachig möglich. Dazu eine Seite namens "STANDARD_META" anlegen - Bei automatisch erzeugen Keywords oder Descriptions werden Wörter nach Zeilen- umbrüchen nicht mehr "zusammengezogen" - Eigene (mehrsprachige) Metas für die Shop-Startseite möglich - Dazu werden die Metas aus der "index"-Seite im ContentManager geholt - Seiten-Nummer im Title bei Artikel-Listen (also Kategorien, Sonderangebote etc.) - Eigener Title bei Suchergebnissen (Mit Seiten-Nummer, Suchbegriff, ggf. Hersteller und Kategorienname) - Bei allen Seiten, die nicht "Kategorie", "Startseite", "Content", "Produkt" o.ä. sind, wird der Title aus den Einträgen im $breadcrumb-Objekt zusammengesetzt - BugFix: BreadCrumb wird nicht mehr verkürzt ----------------------------------------------------------------------------- Inspired by "Dynamic Meta" - Ein WordPress-PlugIn von Michael Schwarz http://www.php-vision.de/plugins-scripte/dynamicmeta-wpplugin.php ---------------------------------------------------------------------------*/ // ----------------------------------------------------------------------------- // Konfiguration... // ----------------------------------------------------------------------------- // Max.-Längen wirken sich nur auf automatisch generierte Teile aus. $metaTitleLength = 90; // Max. Länge des titles (Anzahl Buchstaben) - default: 65 $metaDesLength = 155; // Max. Länge der description (Anzahl Buchstaben) - default: 155 $metaTitleSeparator = ' - '; // Trennzeichen zwischen Title-Tag-Teilen $addPagination = true; // Seiten-Nummern anzeigen? $addCatShopTitle = true; // Shop-Titel bei Kategorien anhängen? $addProdShopTitle = true; // Shop-Titel bei Produkten anhängen? $addContentShopTitle = true; // Shop-Titel bei Contentseiten anhängen? $addSpecialsShopTitle = true; // Shop-Titel bei Angeboten anhängen? $addNewsShopTitle = true; // Shop-Titel bei Neuen Artikeln anhängen? $addSearchShopTitle = true; // Shop-Titel bei Suchergebnissen anhängen? $addOthersShopTitle = true; // Shop-Titel bei sonstigen Seiten anhängen? // Einzelne Dateien auf noindex setzen (Liste der Dateinamen) $files_noindex = array( FILENAME_ACCOUNT, FILENAME_ADVANCED_SEARCH, FILENAME_ADVANCED_SEARCH_RESULT, FILENAME_ASK_A_QUESTION, FILENAME_COOKIE_USAGE, FILENAME_CREATE_ACCOUNT, FILENAME_CREATE_GUEST_ACCOUNT, FILENAME_LOGIN, FILENAME_LOGOFF, FILENAME_NEWSLETTER, FILENAME_PASSWORD_DOUBLE_OPT, FILENAME_SHOPPING_CART ); // Einzelne Content-Seiten auf noindex setzen (Liste der coID's) $content_noindex = array( '0', //news #'1', //versandkosten '2', //datenschutz #'3', //agb '4', //impressum '7', //kontakt #'8', //sitemap #'9', //rueckgaberecht #'10', //zahlungsarten-info '11' //sicheres einkaufen ); // ----------------------------------------------------------------------------- // Ende Konfiguration // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // Title für "sonstige" Seiten // ----------------------------------------------------------------------------- $breadcrumbTitle = end($breadcrumb->_trail); $breadcrumbTitle = $breadcrumbTitle['title']; // ----------------------------------------------------------------------------- // noindex bei "unwichtigen" Seiten (bzw. Dateien) // ----------------------------------------------------------------------------- $meta_robots = 'index,follow'; if( in_array(basename($_SERVER['SCRIPT_NAME']),$files_noindex) ) { $meta_robots = 'noindex,follow'; } // ----------------------------------------------------------------------------- // MultiLanguage-Metas // ----------------------------------------------------------------------------- // Wenn wir auf der Startseite sind, Metas aus der Index-Seite holen if( basename($_SERVER['SCRIPT_NAME'])==FILENAME_DEFAULT && empty($_GET['cat']) && empty($_GET['cPath']) && empty($_GET['manufacturers_id']) ) { $ml_meta_where = "content_group = 5"; } else // ...ansonsten Metas aus STANDARD_META holen { $ml_meta_where = "content_title = 'STANDARD_META'"; } $ml_meta_query = xtc_db_query(" select content_meta_title, content_meta_description, content_meta_keywords from ".TABLE_CONTENT_MANAGER." where ".$ml_meta_where." and languages_id = '".(int)$_SESSION['languages_id']."' "); $ml_meta = xtc_db_fetch_array($ml_meta_query,true); // ----------------------------------------------------------------------------- // Mehrsprachige Standard-Metas definieren. Wenn leer, werden die üblichen genommen // ----------------------------------------------------------------------------- #define('ML_META_DESCRIPTION',($ml_meta['content_meta_description'])?$ml_meta['content_meta_description']:META_DESCRIPTION); define('ML_TITLE',($ml_meta['content_meta_title'])?$ml_meta['content_meta_title']:TITLE); // ----------------------------------------------------------------------------- // Seitennummerierung im Title (Kategorien, Sonderangebote, Neue Artikel etc.) // ----------------------------------------------------------------------------- $Page = ''; if( isset($_GET['page']) && intval($_GET['page'])==$_GET['page'] && $_GET['page'] > 1 && $addPagination ) { // PREVNEXT_TITLE_PAGE_NO ist "Seite %d" aus der deutschen // bzw. "page %d" aus der englischen Sprachdatei ... $Page = trim(str_replace('%d','',PREVNEXT_TITLE_PAGE_NO)).' '.(int)$_GET['page']; } // ----------------------------------------------------------------------------- /** * ueberfluessige leerzeichen und html-code entfernen, * umlaute und sonderzeichen wandeln, inhalt ggf. kuerzen * * @param string $str * @param int $maxlen * @param string $append * * @return string */ function metaClean($str,$maxlen=false,$append='...') { $language_charset = strtoupper($_SESSION['language_charset']); $str = preg_replace('/<[^>]*>/',' ',$str); // more reliable than striptags() $str = html_entity_decode($str,ENT_QUOTES,$language_charset); $str = trim( preg_replace('/\s\s+/',' ',$str) ); if( $maxlen > 0 && strlen($str) > $maxlen ) { $maxlen -= strlen($append); $str = preg_replace('/\s+?\S*$/','',substr($str,0,$maxlen+1)); $str = substr($str,0,$maxlen).$append; } return htmlentities($str,ENT_QUOTES,$language_charset); } /** * build / format meta-title * * @param bool $allow_appended_shopname * @param array $title * * @return string */ function metaTitle($allow_appended_shopname,$title) { global $metaTitleLength, $metaTitleSeparator; // join given stuff $title = array_filter((array)$title,'metaClean'); //remove elements that would be empty $title = array_unique($title); $res = implode($metaTitleSeparator,$title); // append shopname if( $allow_appended_shopname && !empty($res) ) { $shopname = ML_TITLE; $res_tmp = $res.$metaTitleSeparator.$shopname; // shopname isn't empty // && shopname isn't already contained in our current generated title // && new title length won't exceed our maximum if we append the shopname if( metaClean($shopname) && strpos($res,$shopname) === false && strlen($res_tmp) <= $metaTitleLength ) { $res = $res_tmp; } } return $res; } // ----------------------------------------------------------------------------- switch( basename($_SERVER['SCRIPT_NAME']) ) { // ----------------------------------------------------------------------------- // Daten holen: Produktdetails // ----------------------------------------------------------------------------- case FILENAME_PRODUCT_INFO : if( $product->isProduct() ) { // Description // if( !empty($product->data['products_meta_description']) ) { $meta_descr = $product->data['products_meta_description']; $metaDesLength = false; } else { #$meta_descr = $product->data['products_name'].': '.$product->data['products_description']; } // Title // if( !empty($product->data['products_meta_title']) ) { $meta_title = metaTitle($addProdShopTitle,array($product->data['products_meta_title'])); } else { $meta_title = metaTitle($addProdShopTitle,array($product->data['products_name'],isset($product->data['manufacturers_name'])?$product->data['manufacturers_name']:'',$Page)); } // Canonical // $canonical_url = xtc_href_link(FILENAME_PRODUCT_INFO, 'products_id='.$product->data['products_id'],$request_type,false); } break; // ----------------------------------------------------------------------------- // Daten holen: Kategorie // ----------------------------------------------------------------------------- case FILENAME_DEFAULT : $startpage = true; // Sind wir in einer Kategorie? if( !empty($current_category_id) ) { $categories_meta_query = xtDBquery(" select categories_meta_description, categories_meta_title, categories_name, categories_description from ".TABLE_CATEGORIES_DESCRIPTION." where categories_id = '".(int)$current_category_id."' and language_id = '".(int)$_SESSION['languages_id']."' "); $categories_meta = xtc_db_fetch_array($categories_meta_query,true); $startpage = false; } $manu_id = $manu_name = false; // Nachsehen, ob ein Hersteller gewählt ist if( !empty($_GET['manu']) ) { $manu_id = $_GET['manu']; $startpage = false; } if( !empty($_GET['manufacturers_id']) ) { $manu_id = $_GET['manufacturers_id']; $startpage = false; } if( !empty($_GET['filter_id']) && !$manu_id ) { $manu_id = $_GET['filter_id']; $startpage = false; } // ggf. Herstellernamen herausfinden if( $manu_id ) { $manu_name_query = xtDBquery(" select manufacturers_name from ".TABLE_MANUFACTURERS." where manufacturers_id = '".(int)$manu_id."' "); $manu_name = xtc_db_fetch_array($manu_name_query,true); $manu_name = (is_array($manu_name) ? implode('',$manu_name) : ''); } // Description // if( !empty($categories_meta['categories_meta_description']) ) { // ggf. Herstellername hinzufügen #$meta_descr = $categories_meta['categories_meta_description'].(($manu_name)?' - '.$manu_name:''); $meta_descr = $categories_meta['categories_meta_description']; $metaDesLength = false; } elseif( $categories_meta ) { // ggf. Herstellername und Kategorientext hinzufügen #$meta_descr = $categories_meta['categories_name'].(($manu_name)?' - '.$manu_name:'').(($categories_meta['categories_description'])?' - '.$categories_meta['categories_description']:''); } // Title // if( !empty($categories_meta['categories_meta_title']) ) { #$meta_title = metaTitle($addCatShopTitle,array($categories_meta['categories_meta_title'],$manu_name,$Page)); $meta_title = metaTitle($addCatShopTitle,array($categories_meta['categories_meta_title'],$Page)); } elseif( $categories_meta ) { $meta_title = metaTitle($addCatShopTitle,array($categories_meta['categories_name'],$manu_name,$Page)); } elseif( $startpage ) { $meta_title = metaTitle(false,array(ML_TITLE)); } // Canonical // if( xtc_not_null($cPath) ) { $url_param_page = ( isset($_GET['page']) && intval($_GET['page'])==$_GET['page'] && $_GET['page'] > 1 ? '&page='.(int)$_GET['page'] : '' ); $canonical_url = xtc_href_link(FILENAME_DEFAULT, 'cPath='.$cPath.$url_param_page,$request_type,false); } elseif( $startpage ) { $canonical_url = xtc_href_link(FILENAME_DEFAULT, '', $request_type); } // Robots // if( xtc_not_null($cPath) ) { if( isset($_GET['page']) && intval($_GET['page'])==$_GET['page'] && $_GET['page'] > 1 ) { $meta_robots = 'noindex,follow'; // noindex bei kategorien ab seite 2 } } break; // ----------------------------------------------------------------------------- // Daten holen: Inhalts-Seite (ContentManager) // ----------------------------------------------------------------------------- case FILENAME_CONTENT : // Robots // if( isset($_GET['coID']) && in_array($_GET['coID'],$content_noindex) ) { $meta_robots = 'noindex,follow'; // Noindex bei bestimmten Content Seiten } $contents_meta_query = xtc_db_query(" select content_meta_title, content_meta_description, content_meta_keywords, content_title, content_heading, content_text, content_file from ".TABLE_CONTENT_MANAGER." where content_group = '".(int)$_GET['coID']."' and languages_id = '".(int)$_SESSION['languages_id']."' "); $contents_meta = xtc_db_fetch_array($contents_meta_query,true); if( count($contents_meta) > 0 ) { // Eingebundene Dateien auslesen if( !empty($contents_meta['content_file']) ) { // Nur Text- oder HTML-Dateien erlauben if( preg_match('/\.(?:txt|html?)$/i',$contents_meta['content_file']) ) { $contents_meta['content_text'] .= ' '.implode(' ', @file(DIR_FS_CATALOG.'media/content/'.$contents_meta['content_file'])); } } // Title // if( !empty($contents_meta['content_meta_title']) ) { $meta_title = metaTitle($addContentShopTitle,array($contents_meta['content_meta_title'])); } else { $meta_title = metaTitle($addContentShopTitle,array($contents_meta['content_title'],$contents_meta['content_heading'])); } // Description // if( !empty($contents_meta['content_meta_description']) ) { $meta_descr = $contents_meta['content_meta_description']; $metaDesLength = false; } else { #$meta_descr = ($contents_meta['content_heading'])?$contents_meta['content_heading'].': ':''; #$meta_descr .= $contents_meta['content_text']; } } // Canonical // if( isset($_GET['coID']) ) { $canonical_url = xtc_href_link(FILENAME_CONTENT,'coID='.$_GET['coID'],$request_type,false); } break; // ----------------------------------------------------------------------------- // Title für Suchergebnisse // ----------------------------------------------------------------------------- case FILENAME_ADVANCED_SEARCH_RESULT : // ggf. Herstellernamen herausfinden if( !empty($_GET['manufacturers_id']) ) { $manu_name_query = xtDBquery(" select manufacturers_name from ".TABLE_MANUFACTURERS." where manufacturers_id = '".(int)$_GET['manufacturers_id']."' "); $manu_name = xtc_db_fetch_array($manu_name_query,true); $manu_name = (is_array($manu_name) ? implode('',$manu_name) : ''); } // ggf. Kategorien-Namen herausfinden if( !empty($_GET['categories_id']) ) { $cat_name_query = xtDBquery(" select categories_name from ".TABLE_CATEGORIES_DESCRIPTION." where categories_id = '".(int)$_GET['categories_id']."' and language_id = '".(int)$_SESSION['languages_id']."' "); $cat_name = xtc_db_fetch_array($cat_name_query,true); $cat_name = (is_array($cat_name) ? implode('',$cat_name) : ''); } $meta_title = metaTitle($addSearchShopTitle,array($breadcrumbTitle,$Page,(isset($cat_name)?$cat_name:''),(isset($manu_name)?$manu_name:''))); break; // ----------------------------------------------------------------------------- // Title für Angebote // ----------------------------------------------------------------------------- case FILENAME_SPECIALS : $meta_title = metaTitle($addSpecialsShopTitle,array($breadcrumbTitle,$Page)); break; // ----------------------------------------------------------------------------- // Title für Neue Artikel // ----------------------------------------------------------------------------- case FILENAME_PRODUCTS_NEW : $meta_title = metaTitle($addNewsShopTitle,array($breadcrumbTitle,$Page)); break; // ----------------------------------------------------------------------------- // Title für sonstige Seiten // ----------------------------------------------------------------------------- default: $meta_title = metaTitle($addOthersShopTitle,array($breadcrumbTitle,$Page)); break; // ----------------------------------------------------------------------------- } // end switch // ----------------------------------------------------------------------------- // ...und wenn nix drin, dann nochmal kurz aufräumen // ----------------------------------------------------------------------------- // Title // if( empty($meta_title) ) { $meta_title = ''; } // Description // if( empty($meta_descr) ) { $meta_descr = ''; $metaDesLength = false; } // Robots // if( empty($meta_robots) ) { $meta_robots = ''; } // Canonical // if( empty($canonical_url) ) { $canonical_url = ''; } elseif( preg_match('#^https?://[^/]+/index\.php$#i',$canonical_url) ) { $canonical_url = preg_replace('#^(https?://[^/]+/)index\.php$#i','$1',$canonical_url,1); } // ----------------------------------------------------------------------------- $meta_title = metaClean($meta_title); if( !empty($meta_title) ) { echo '<title>'.$meta_title.'</title>'."\n"; } echo '<meta http-equiv="cache-control" content="no-cache" />'."\n"; if( !empty($_SESSION['language_charset']) ) { echo '<meta http-equiv="content-type" content="text/html;charset='.$_SESSION['language_charset'].'" />'."\n"; } if( !empty($_SESSION['language_code']) ) { echo '<meta http-equiv="content-language" content="'.$_SESSION['language_code'].'" />'."\n"; echo '<meta name="language" content="'.$_SESSION['language_code'].'" />'."\n"; } $meta_descr = metaClean($meta_descr,$metaDesLength); if( !empty($meta_descr) ) { echo '<meta name="description" content="'.$meta_descr.'" />'."\n"; } if( !empty($meta_robots) ) { echo '<meta name="robots" content="'.$meta_robots.'" />'."\n"; } if( !empty($canonical_url) ) { echo '<link rel="canonical" href="'.$canonical_url.'" />'."\n"; } ?>