@michi Dennis sagt nicht, dass er es toll findet, dass es leider nicht ganz einfach ist einen guten Entwickler zu finden. Es ist aber einfach eine Tatsache und kein dummer Spruch. Es ist auch nicht so, dass die Dienstleister sich zu fein wären oder "wegen Reichtums geschlossen" haben. Die Nachfrage ist jedoch einfach größer als das Angebot. Du musst dich nicht "für deine Aufdringlichkeit" entschuldigen. Du musst nur leider momentan damit rechnen, dass es ein wenig dauern kann, bis du einen Dienstleister gefunden hast, der dich glücklich machen kann.
Daniel, dann hast du aber die Antworten davor nicht gelesen. Es ist nicht unbedingt das, was ich von einem Hilfeforum erwartet hätte. Sorry und entschuldige bitte, dass ich dieses Dienstleister-Verzeichnis nicht gleich gefunden habe, stattdessen diese 0800-er Nummer gewählt habe. Ist nur etwas irritierend, wenn der Support mir emphiehlt, einen Programmierer ausserhalb von Gambio zu suchen, obwohl ich hier noch diesen Obolus für "X-Service?" bezahlt habe. Ich wollte einfach nur das, was vorher schon im Gambio-Shop möglich war. Die Einbindung der metatag.php über die header.php. Wie bereits schon geschrieben, wenn das zu schwer ist; entschuldige ich mich ganz höflich. Wer (?) als Gambio-Programmierer sollte mir hier helfen können? Wozu ist dieses Forum, zur Belustigung derer, die meinen "schlauer" zu sein als andere? oder sollte es hier Hilfe geben. Vielleicht habe ich diesen Ansatz nicht richtig verstanden! Dann nochmals Entschuldigung.
Hallo, da ich jetzt über den anderen Thread hier reingestolpert bin, setzen wir das mal hier fort, damit das Thema sich nicht zu sehr verteilt. Also, die metatags.php scheint ein Relikt aus grauer Vorzeit zu sein. Selbst in Gambio GX 1.0.0 (!!!) war die entsprechende Einbindung der Datei in includes/header.php schon auskommentiert und durch GMMeta ersetzt. Diesen Lösungsansatz sollte man daher nicht weiter verfolgen, das ist nicht zielführend. Der korrekte und updatesichere Weg wäre eine Überladung für GMMeta. Die zentrale Frage ist allerdings, was da nun eigentlich passieren soll. Dafür müsstest du mal eben genau darlegen, welche Daten du hast und wo die hin sollen. Gegebenenfalls müsste man dafür mal deine alte metatags.php ansehen.
Die alte hatte ich hier hochgeladen, leider kamen eben nur die netten Antworten davor, mit denen ich nichts anfangen kann, sorry .... Mein Supportvertrag läuft heute aus. Ich habe diese GM-dingens immer auf die alte metatags.php über die header.php wieder eingebunden. Ich bin in google mit knapp 3600 Artikeln unterwegs. Eine so umfangreiche Änderung würde mich wieder aus dem Index schmeissen und die vielen Jahre Arbeit wären wieder umsonst! Wie gesagt, mein Supportvertrag läuft heute aus. Begeistert habe ich von der Hilfe hier Kenntnis genommen. Wenn du einen Lösungansatz hast, wäre ich Dir dankbar, diesen per Mail erfahren zu dürfen. Das Forum dürfte für mich morgen nicht mehr erreichbar sein. Bei mir nicht, ich habe diese - meine angepasste - wieder "einkommentiert" LG Michi
Hallo michi wirklich schade, dass du mit der Hilfe hier im Forum nicht zufrieden bist. Zum Glück geht es da 98% der User zurecht anders.
Kommt jetzt der nächste und meckert an mir rum? Was ist denn an Hilfe gekommen? schau da und da, klar die Dateien habe ich auch gefunden. Wirklich schade, dass hier der nächste aufschlägt in der Art von Dennis. Vielen Dank Achim
Muss jetzt Michi mal in Schutz nehmen. Das Forum ist teils seeeehr allgemein gehalten und auch der ein oder andere Kommentar ist absolut nicht hilfreich. Ist mir klar, dass man nicht alles hier lösen kann, nur dann sollte man lieber gar nicht antworten als 10 mal zu schreiben: "... kannst anpassen, bla bla". Meist ist die Frage doch: WO, in welcher DATEI. Aber deswegen liebe ich ja Foren, weil da immer Schlaumeier sind, die zu jedem ihren Senf dazugeben müssen. (könnt mich jetzt bewerfen, schließlich hab ich meinen Senf hier auch dazu beigetragen).
Der Shop basiert auf xt ist ein Fork. XT ist seit vielen Jahren unterwegs. Seinerzeit habe ich dem anderen "netten" XT-Forum den Rücken gekehrt, weil so viel Arroganz nicht gesund ist und ich verkaufen will. Gambio hat einen tollen Shop gehabt und den habe ich dann letztendlich bis heute seit 2007 auf allinkl.com gehostet. Es wurde ein Support mit vielen updates sehr aktuell angeboten, fand ich toll. Das was hier nun passiert, weil ich einmal ein Problem habe und evtl. hier im Forum jemanden suchte, der mir evtl. helfen könnte - nicht für Lau - ich arbeite auch nicht für Lau, ist unterste Schublade. Hilfe wenn vorhanden, erwarte ich eine Antwort, aber nicht Belehrungen wie "ohne Fleiss kein Preis". Finde ich einfach unverschämt, da ich mich bemühe und auch Löhne, wenn was zu löhnen ist! Sich aber hier wichtig zu tun mit wenn du willst dann stell mal klar und dann kommt - naja da mußt du ein Ticket aufmachen" ist unterste Schublade, zumal das was ich wollte klar umrissen wurde. DIE ALTE METATAGS.PHP über die header.php eingebunden. Was muß ich als Laie da noch Profis klarstellen, wenn es denn Profis sind, die sich hier zu Worte melden. Veralbern kann ich mich alleine... Ein Ticket habe ich aufgemacht. Da kam nach 2 Tagen ich solle ein Angebot einholen. DAFÜR braucht man 2 Tage? Danke
Hallo Rico, damit hast Du m.E. leider Recht! Antworten auf konkrete Fragen sollte zielführend sein und keine allgemeinen BlaBla-Hinweise enthalten. Bitte aber zu bedenken, dass es manchmal nicht ganz einfach ist, auf eine Frage, die im Forum bereits unendlich oft beantwortet ist, noch die erforderlich Geduld für eine ausführliche und zielführende Antwort zu geben. (Asche auch auf mein Haupt) Kleines Beispiel: Bei Fragen zu "html" und "css" sollte ein sogenannter "Link zur Baustelle" vom Fragenden immer angegeben sein - leuchtet doch irgendwie ein - oder? Ich habe mit zwar inzwischen einen Textbaustein für diesen Hinweis angelegt, aber es nervt ungemein teilweise den Grund für diesen Hinweis auch noch erklären zu müssen! Lange Rede kurzer Sinn: Der Stil & Inhalt mancher Antwortenden hat noch Optimierungspotenzial!
mal kurze Rückfrage... Kann man die GMMeta.php overloaden, so dass sie updatesicher ist? Wo muss sie dann hin? Bzw... kann man alle php overloaden? - Gibts da ne Anleitung wo das entsprechende Zeugs hin muss? Bis jetzt hab ich nur was zu den /include - phps gefunden.
Danke Dennis für den Link zum (minimal-)Wiki. ICh habe eigentlich alles so gemacht wie beschrieben: 1. Ordner erstellt: /user_classes/overloads/GMMeta 2. Darin die Datei: ART_GMMeta.inc.php 3. Die Datei soll einfach nur den Meta-Titel um den Seitentitel erweitern (markiert im code mit "//nächste zeile Änderung" und hat den Inhalt wie folgt: Ich sehe zwar die Seite im Browser, jedoch scheint die Änderung nicht zu funktionieren. Wenn ich das ganze in der Original-Datei ändere geht es. Jemand eine Idee? PHP: <?php /* -------------------------------------------------------------- GMMeta.php 2014-01-10 gm Gambio GmbH http://www.gambio.de Copyright (c) 2014 Gambio GmbH Released under the GNU General Public License (Version 2) [http://www.gnu.org/licenses/gpl-2.0.html] -------------------------------------------------------------- */ /* * class GMMeta */ class ART_GMMeta extends ART_GMMeta_parent { var $gm_lang_id; var $gm_lang_code; var $gm_language_charset; var $use_title; var $show_title; var $separator; var $title; var $output; /* * class GMMeta */ function GMMeta($p_output = true) {$this->output = $p_output; // get language if(!class_exists('language')) { include_once(DIR_WS_CLASSES . 'language.php'); } $lng = new language(xtc_input_validation($_SESSION['language_code'], 'char', '')); if(!empty($_SESSION['languages_id'])) { $this->gm_lang_id = $_SESSION['languages_id']; } else { $this->gm_lang_id = $lng->language['id']; } $this->gm_lang_code = $lng->language['code']; $this->gm_language_charset = $lng->language['language_charset']; $this->use_standard_title = gm_get_conf('GM_TITLE_USE_STANDARD_META_TITLE'); $this->show_standard_title = gm_get_conf('GM_TITLE_SHOW_STANDARD_META_TITLE'); $this->standard_title_separator = gm_get_content('GM_TITLE_STANDARD_META_TITLE_SEPARATOR', $this->gm_lang_id); $t_standard_title = gm_get_content('GM_TITLE_STANDARD_META_TITLE', $this->gm_lang_id); if(empty($t_standard_title)) { $t_standard_title = htmlspecialchars_wrapper(STORE_NAME); } else { $t_standard_title = htmlspecialchars_wrapper($t_standard_title); } $this->standard_title = $t_standard_title; return; } /* * get metatags */ function get($cPath, $product) {// get essential meta $t_html .= $this->get_base_meta($p_output); // get optional metatags $t_html .= $this->get_optional_meta($cPath, $product, $p_output); // get content metatags $t_html .= $this->get_content_meta($cPath, $product, $p_output); return $t_html; } /* * get essential metatags */ function get_base_meta() {$t_html = '<meta http-equiv="Content-Type" content="text/html; charset=' . $this->gm_language_charset . '" />' . "\n"; $t_html .= "\t\t" . '<meta http-equiv="Content-Style-Type" content="text/css" />' . "\n"; $t_html .= "\t\t" . '<meta name="robots" content="' . gm_get_content('robots', $this->gm_lang_id) . '" />' . "\n"; $t_html .= "\t\t" . '<meta name="language" content="' . $this->gm_lang_code . '" />' . "\n"; if($this->output) { echo $t_html; } return $t_html; } /* * get metatags generated by content */ function draw_page_title($p_content, $p_optional = '') {$t_page = ''; $t_html = ''; if(isset($_GET['page']) && empty($_GET['page']) === false) { $t_page = ' ' . GM_PAGE . ' ' . $_GET['page']; } if(empty($p_content) === false) { $t_title .= htmlspecialchars_wrapper($p_content) . $t_page; } else if(empty($p_optional) === false) { $t_title .= htmlspecialchars_wrapper($p_optional) . $t_page; } else { $t_title = htmlspecialchars_wrapper(STORE_NAME); } if((int)$this->use_standard_title == 1 && empty($this->standard_title) === false) { if($this->show_standard_title == 'before' || empty($this->show_standard_title)) { //nächste Zeile Änderung $t_title = $this->standard_title . $this->standard_title_separator . $p_optional . $this->standard_title_separator . $t_title; } else if($this->show_standard_title == 'after') { $t_title = $t_title . $this->standard_title_separator . $this->standard_title; } } $t_html = "\t\t" . '<title>' . trim($t_title) . '</title>' . "\n"; if($this->output) { echo $t_html; } return $t_html; } /* * get metatags generated by content */ function draw_meta_tag($name, $content, $optional = "") {$t_html = ''; if(empty($content) && !empty($optional)) { $content = $optional; } if(!empty($content)) { $t_html = "\t\t" . '<meta name="' . $name . '" content="' . htmlspecialchars_wrapper($content) . '" />' . "\n"; } if($this->output) { echo $t_html; } return $t_html; } /* * get metatags generated by content */ function get_content_meta($cPath, $product) {$t_html = ''; $gm_default = gm_get_content(array('keywords'), $this->gm_lang_id); // handle products if($product->pID != 0) { $t_html .= $this->draw_meta_tag('keywords', $product->data['products_meta_keywords'], gm_get_content('keywords', $this->gm_lang_id), $p_output); $t_html .= $this->draw_meta_tag('description', $product->data['products_meta_description'], gm_get_content('description', $this->gm_lang_id), $p_output); $t_html .= $this->draw_page_title($product->data['products_meta_title'], $product->data['products_name'], $p_output); /* Facebook Start */ // show metatags if facebook activated $t_show_facebook = gm_get_conf('SHOW_FACEBOOK'); if($t_show_facebook == 'true') { // get page URL $coo_page_url_master = MainFactory::create_object('PageUrlMaster'); $t_product_url = $coo_page_url_master->get_product_url($product->pID, $product->data['products_name'], false, '', 'NONSSL', false); // set product image $t_product_image = ''; if($product->data['products_image'] != '') { $t_product_image = GM_HTTP_SERVER . DIR_WS_CATALOG . DIR_WS_INFO_IMAGES . $product->data['products_image']; } // set metatags $t_html_properties = "\t\t" . '<meta property="og:title" content="' . htmlentities_wrapper($product->data['products_name']) . '" />' . "\n"; $t_html_properties .= "\t\t" . '<meta property="og:url" content="' . htmlentities_wrapper($t_product_url) . '" />' . "\n"; $t_html_properties .= "\t\t" . '<meta property="og:image" content="' . htmlentities_wrapper($t_product_image) . '" />' . "\n"; $t_html_properties .= "\t\t" . '<meta property="og:site_name" content="' . htmlentities_wrapper(STORE_NAME) . '" />' . "\n"; $t_html .= $t_html_properties; if($this->output) { echo $t_html_properties; } } /* Facebook Ende */ // handle categories } else if(!empty($cPath)) { $gm_cat_id = explode('_', $cPath); $categories_meta_query = xtc_db_query(" SELECT categories_meta_keywords, categories_meta_description, categories_meta_title, categories_name FROM " . TABLE_CATEGORIES_DESCRIPTION . " WHERE categories_id='" . xtc_db_input(end($gm_cat_id)) . "' AND language_id='" . $this->gm_lang_id . "' "); $categories_meta = xtc_db_fetch_array($categories_meta_query, true); $t_html .= $this->draw_meta_tag('keywords', $categories_meta['categories_meta_keywords'], gm_get_content('keywords', $this->gm_lang_id), $p_output); $t_html .= $this->draw_meta_tag('description', $categories_meta['categories_meta_description'], gm_get_content('description', $this->gm_lang_id), $p_output); $t_html .= $this->draw_page_title($categories_meta['categories_meta_title'], $categories_meta['categories_name'], $p_output); // handle contents } else if(strpos(gm_get_env_info('SCRIPT_NAME'), 'shop_content.php') !== false || (strpos(gm_get_env_info('SCRIPT_NAME'), 'shop_content.php') === false && !is_object($cPath) && empty($product->pID))) { if(!empty($_GET['manufacturers_id'])) { $manu_query = xtc_db_query(" SELECT manufacturers_name AS name FROM manufacturers WHERE manufacturers_id='" . xtc_db_input($_GET['manufacturers_id']) . "' "); $manu_meta = xtc_db_fetch_array($manu_query, true); $t_html .= $this->draw_page_title($manu_meta['name'], '', $p_output); } else { $gm_coID = (int)$_GET['coID']; if(strpos(strtolower(gm_get_env_info('SCRIPT_NAME')), 'index.php') !== false && empty($gm_coID)) { $gm_coID = 5; } $contents_meta_query = xtc_db_query(" SELECT content_title, content_heading, contents_meta_title, contents_meta_keywords, contents_meta_description FROM " . TABLE_CONTENT_MANAGER . " WHERE content_group='" . xtc_db_input($gm_coID) . "' AND languages_id='" . $this->gm_lang_id . "' "); $contents_meta = xtc_db_fetch_array($contents_meta_query, true); if(empty($contents_meta['content_heading'])) { $contents_meta['content_heading'] = $contents_meta['content_title']; } $t_html .= $this->draw_page_title($contents_meta['contents_meta_title'], $contents_meta['content_title'], $p_output); $t_html .= $this->draw_meta_tag('keywords', $contents_meta['contents_meta_keywords'], gm_get_content('keywords', $this->gm_lang_id), $p_output); $t_html .= $this->draw_meta_tag('description', $contents_meta['contents_meta_description'], gm_get_content('description', $this->gm_lang_id), $p_output); } } return $t_html; } /* * get all optional metatags */ function get_optional_meta($cPath, $product) {$t_html = ''; $gm_metatags = gm_get_content_by_group_id(1, $this->gm_lang_id); foreach($gm_metatags as $gm_key => $gm_value) { $t_key_facebook = preg_match('=^facebook_=', $gm_key); $t_is_product = (empty($product->pID) ? false : true); $t_get_fb_meta = true; if($gm_key != 'keywords' && $gm_key != 'robots') { if((!empty($cPath) && $gm_key == 'description') || ((int)$product->pID != 0 && $gm_key == 'description') || (isset($_GET['coID']) && $gm_key == 'description') || (strpos(gm_get_env_info('SCRIPT_NAME'), 'shop_content.php') === false && !is_object($cPath) && empty($product->pID) && $gm_key == 'description')) { } else { if ($t_key_facebook) { $t_facebook_key = str_replace('facebook_', '', $gm_key); $t_content = $gm_value; switch($t_facebook_key) { case 'url' : case 'title' : case 'description' : if($t_is_product) { $t_get_fb_meta = false; } break; } switch($t_facebook_key) { case 'url' : $t_content = GM_HTTP_SERVER . gm_get_env_info('REQUEST_URI'); break; case 'description' : $t_content = (strlen(trim($t_content)) > 0 ? trim($t_content) : trim($gm_metatags['description'])); break; } if($t_get_fb_meta === true) { $t_html .= "\t\t" . '<meta property="' . 'og:' . $t_facebook_key . '" content="' . htmlspecialchars_wrapper($t_content) . '" />' . "\n"; } } else { $t_html .= "\t\t" . '<meta name="' . $gm_key . '" content="' . htmlspecialchars_wrapper($gm_value) . '" />' . "\n"; } } } } /* TODO: New Logo for Facebook (min. 200 x 200px) if($t_is_product === false) { $coo_logo_manager = MainFactory::create_object('GMLogoManager', array('gm_logo_shop')); $t_logo = $coo_logo_manager->logo_path . $coo_logo_manager->logo_file; $t_html .= "\t\t" . '<meta property="og:image" content="' . htmlspecialchars_wrapper($t_logo) . '" />' . "\n"; }*/ if($this->output) { echo $t_html; } return $t_html; } }
Ds Wiki is im Aufbau. Intern haben die schon einiges mehr, aber mit Supporter Kommentareen. Wird sicher bald erweitert das Wiki.