PDA

Shop Support News Archive - Shopbetreiber News -> Forum : xt eCommerce Templates Module SEO Support: GPL Shop: Script Wird Ausserhalb Der Box Angezeigt


Mythbuster
15.03.2006, 09:47
Hallo zusammen

Wer kann mir bei diesem Problem weiterhelfen? Seit Tagen versuche ich ein Script in die xtc_show_category.inc.php einzubauen. Leider half mir auch ein ähnlicher Fall hier im Forum nicht weiter.

Es handelt sich hierbei um ein zusätzliches Navigationsmenü mit Unterstufen welches ich dnicht unter die normale Produktekategorie einbauen möchte.

Das Problem:

Den folgenden Script habe ich in die xtc_show_category.inc.php vor <?php eingebaut:


<link href="menuinc/style.css" type="text/css" rel="stylesheet">
<script type="text/javascript" src="menuinc/menu.js"></script>


Sowie vor ?>


include('menuinc/menu.inc.php');
** $menu = new FlexMenu("topmenu.xml", 130, 21, 130, 21, "Lime", "Yellow", "Navy", "Grey", 1, 2, 1, "",1);
$output = $menu->Show();


Mit dem Befehl <?=$output?>welcher ich nach ?> platziert habe, kann ich das Script zwar aufrufen, doch erscheint dieses dann oben Links im Shop und nicht in der Box. Ich habe auch schon versucht das ganze in die box_categories.html zu packen, leider jedoch ohne Erfolg!

Was muss ich machen, damit das Script in der Kategoriebox unterhalb des Produktemenüs angezeigt wird?

Ich hoffe jemand kann mir weiterhelfen - ich habe diese Frage im XTC Forum schon 3 x gepostet und nicht mal eine einzige Rückantwort erhalten. Da sieht man, wie man dort mit den Mitgliedern umgeht.

Gruss
Mythbuster

Mythbuster
15.03.2006, 17:27
Ich sehe - ich habe auch hier kein Glück! :unsure:

Ist es überhaupt möglich ein Script in einer Box zu betreiben?

Gruss
Mhystbuster

bluemoon
15.03.2006, 18:18
das kommt ganz auf das Script an

was hast Du denn genau vor ?

HarryBoo
15.03.2006, 18:41
... nur mal so am Rande bemerkt.

Ist es bekannt das Javascripte aus der templates\dein_template\javascript\general.js.php sollten?

Viellenicht hilft es ja weiter.

Gruß HarryBoo

hendrik
15.03.2006, 18:44
Direkte Ausgaben für den Clientbrowser sind in den PHP-Dateien des Templates-Ordners total falsch (xtc_show_category.inc.php).

Du musst den HTML-Code für die Kategorieauflistung der Kategoriebox in die Variable $categories_string ablegen. Deren Inhalt wird dann später (nach Ausführung des PHP-codes dieser Datei) an entsprechender Stelle im Gesamtkontext ausgegeben.

Deine <link>- und <script>-Tags wären im Template box_categories.html besser platziert.

include('menuinc/menu.inc.php');
** $menu = new FlexMenu("topmenu.xml", 130, 21, 130, 21, "Lime", "Yellow", "Navy", "Grey", 1, 2, 1, "",1);
$output = $menu->Show();

Macht $menu-show() eine Ausgabe? Falls ja -> falsch. s.o.
Ist $output der HTML-Code deines Menüs? Dann schreibe folgendes am Ende

$categories_string .= $output;

Musst du prüfen, ob du die $categories_string selbst völlig neu mit HTML-Code füllst oder nur anhänglich. Ich weiss nun nicht, was dein "FlexMenu" da produziert.

Gruss
Hen

Alucard
15.03.2006, 20:28
''>ZITAT</div>Ich sehe - ich habe auch hier kein Glück! :unsure: [/b]

Du musst einfach nur warten bis jeder mal das Thema gelesen hat. :P

''>ZITAT</div>Ist es überhaupt möglich ein Script in einer Box zu betreiben?[/b]

Eine unreine Variante wäre es den php code in{php}{/php} direkt im Template unterzurbingen.
Allerdings rollen sich mir bei dieser Variante die Fussnägel hoch. <_<

Das ist nämlich nicht der Sinn einer Template engine, php-code im Template unterzubringen.

Mythbuster
15.03.2006, 23:50
Herzlichen Dank euch allen! :D

Mythbuster
17.03.2006, 12:01
Hallo zusammen

Könnt ihr mir bitte nochmals ein bischen auf die Sprünge helfen? :unsure:

Ich habe das Scipt nun wie folgt eingebaut:

In die templates/MeinTemplate/source/boxes/categories.php

Vor <?php


<link href="menuinc/style.css" type="text/css" rel="stylesheet">
<script type="text/javascript" src="menuinc/menu.js"></script>


Dann am Schluss vor ?>

include('menuinc/menu.inc.php');
**$menu = new FlexMenu("topmenu.xml", 130, 21, 130, 21, "Lime", "Yellow", "Navy", "Grey", 1, 2, 1, "",1);
$box_smarty->assign('FLEXMENU', $menu->Show());


So sollte mir in der templates/Mein Template/boxes/box_categories.html die Variable {$FLEXMENU} zur Verfügung stehen. Diese habe ich auch dort eingetragen.

Dann allerdings erhalte ich die folgende Fehlermeldung:

Fatal error: Smarty error: [in xtc4/boxes/box_categories.html line 5]: syntax error: unrecognized tag: / this will affect the outlining border of all the tables and boxes through-out the skin. / background: #FFF; border: 1px solid #072A66; padding: 0; margin: 0; (Smarty_Compiler.class.php, line 436) in F:\xampplite\htdocs\shop\includes\classes\Smarty_2 .6.10\Smarty.class.php on line 1088


Wie bereits erwähnt, dass Script funktioniert, ohne Smarty übergabe. Doch dann wird mir das Fexmenu direkt oben links im Shop ausgegeben (nicht in der Box). Wie muss ich dieses korrekt an die Smarty übergeben?

Beste Grüsse
Mhystbuster

Alucard
17.03.2006, 12:22
Schau nach ob sich Stylesheet Anweisungen in deiner Box befinden die in <script></script> stehen.

Smarty versucht alles was eine {} hat zu interpretieren.

hendrik
17.03.2006, 12:35
1.) Nochmal:

<link href="menuinc/style.css" type="text/css" rel="stylesheet">
<script type="text/javascript" src="menuinc/menu.js"></script>

Das gehört in die Templatedatei, nicht in eine PHP-Datei( s.o.) .
Am bestens in templates/<dein template>/index.html


2.)

templates/<dein template>/source/boxes/categories.php, Zeile ca. 117

Dein Code gehört an Zeile 117




// Einfuegung Flex
include('menuinc/menu.inc.php');
$menu = new FlexMenu("topmenu.xml", 130, 21, 130, 21, "Lime", "Yellow", "Navy", "Grey", 1, 2, 1, "",1);

// Original Zeile 117
$box_smarty->assign('BOX_CONTENT', $categories_string);****************************

// Boxinhalt wird ersetzt durch Flexmenu
$box_smarty->assign('BOX_CONTENT', $menu->Show());******************************

// Flexmenu wird angehängt
$box_smarty->assign('BOX_CONTENT', $categories_string.$menu->Show());






3.) Lies dir mal die Fehlermeldung durch.

"Smarty error: [in xtc4/boxes/box_categories.html line 5]"

Deine Templatedatei hat'n Fehler. Ist in der Fehlermeldung ganz gut beschrieben. Da scheint sich php-Code zu befinden der da nicht hingehört.



Gruss
Hen

Mythbuster
17.03.2006, 14:17
Hallo Hen

Herzlichen Dank für Deine Hilfe & Geduld :rolleyes:

Es klappt nun bestens!

Gruss
Mhystbusters

Kopernikus
23.03.2006, 22:05
Hallo

Ich möchte auch ein zusätzliches Menü einbauen. Allerdings ist das meinige ein sehr simples php Menü ohne Smarty Tag. Da ich mich mit php auch nicht sehr gut auskenne, weiss ich nun nicht, wie ich das Menü einbinden kann. Ich möchte es ebenfalls direkt unter die bestehende Kategorie platzieren.

Kann mir da jemand weiterhelfen? Mein php Menü Script besteht aus den folgenden Dateien:

menu.php

<?php

/
This Menu system is very simple yet very effective.**It only requires two files:
menu.php (this one) which gets included on your webpage
menu.txt which contains the menu information

In this file you can set how the menu appears.**The menu is laid out in a simple table
with one cell per row.**The $opentag is the opening code for the table.**Change this to
whatever you wish or leave it as is if you don't know what you are doing.**Similarly the
$closetag closes the table.

$Level_1 contains the code needed to display the first level (menu items marked with a +)
$Level_2 contains the code needed to display the second level (menu items marked with a ++)
$Level_3 contains the code needed to display the third level (menu items marked with a +++)

use $Link to refer to where the menu item should link to
use $Text to refer to the text for the menu item
/

//-----------------------------------------------------------------------
//User Configurable Section
//-----------------------------------------------------------------------

$Level_1 = '<td bgcolor="#000080">$Text ($Link)</td>';
$Level_2 = '<td bgcolor="#aaaa80">$Text ($Link)</td>';
$Level_3 = '<td bgcolor="#ffff80">$Text ($Link)</td>';
$opentag = '<table width="100%">';
$closetag = '</table>';

//----------------------------------------------------------------------
//Do not change anything below this line
//----------------------------------------------------------------------

//$buffer[$i][0] = Menu Text
//$buffer[$i][1] = URL
****
if ****($_SERVER["SCRIPT_URI"] != ""){
****$absURL = $_SERVER["SCRIPT_URI"];//get the URL of the page - used to expand menu
}
else {
****$absURL = $_SERVER["SCRIPT_NAME"];//get the URL of the page - used to expand menu
}
//add slashes around the " characters to ensure the eval works and to print correctly in browser
$Level_1 = addslashes($Level_1);
$Level_2 = addslashes($Level_2);
$Level_3 = addslashes($Level_3);

$buffer = array(); //initialise
$expandnode1=-1;** //initialise (set to unused number)
$expandnode2=-1;** //initialise (set to unused number)
$i=1;
$handle = fopen('menu.txt', "r");****//open menu file
while (!feof($handle)) {
****$buffer[$i] = preg_split("/\t+/", trim(fgets($handle)));****//split on tabs
****if (strpos($absURL, $buffer[$i][1]) || $buffer[$i][1] == $absURL){****//mark the point where the menu needs to expand around
********$expandpoint=$i;
****}
****$i++;
}
fclose($handle);

$this_level=substr_count($buffer[$expandpoint][0],"+"); //count the number of "+" in the menu item to determine its level

//this next section determines the exact points that the menu needs to expand on based on the different scenaros
if ($this_level==1){
****if (substr_count($buffer[$expandpoint+1][0],"+")==2){
********$expandnode1=$expandpoint;//where to open into level 2
****}
}

if ($this_level==2){
****for ($i=$expandpoint; $i>0; $i--){
********if (substr_count($buffer[$i][0],"+")==1){
************$expandnode1=$i;//where to open into level 2
************break;
********}
****}
****
****if (substr_count($buffer[$expandpoint+1][0],"+")==3){
********$expandnode2=$expandpoint;//where to open into level 3
****}
}

if ($this_level==3){
****for ($i=$expandpoint; $i>0; $i--){
********if (substr_count($buffer[$i][0],"+")==1){
************$expandnode1=$i;//where to open into level 2
************break;
********}
****}

****for ($i=$expandpoint; $i>0; $i--){
********if (substr_count($buffer[$i][0],"+")==2){
************$expandnode2=$i;//where to open into level 2
************break;
********}
****}****
}
echo "$opentag\n";
for ($i=0; $i<=count($buffer); $i++){
****$previous_level=substr_count($buffer[$i-1][0],"+");
****$this_level=substr_count($buffer[$i][0],"+"); //counts the number of plusses in the string (note need to limit this to leading plusses)
****$Text=str_replace("+", "", $buffer[$i][0]);//Text to be displayed on menu item minus all the plusses
****$Link=$buffer[$i][1];//Link to be added to the used on the menu item

//work out when to switch on and off the menu expansion****
****if ($i==$expandnode1){
********$expandnode1_on=TRUE;
****}
****if ($i==$expandnode2){
********$expandnode2_on=TRUE;
****}

****if ($this_level<$previous_level){
********if ($expandnode1_on==TRUE){
************$expandnode1_on=FALSE;
********}
********if ($expandnode2_on==TRUE){
************$expandnode2_on=FALSE;
********}
****}
//print out the menu items
****if ($this_level==1){
********eval("\$Level_1b = \"$Level_1\";");
********echo "<tr>$Level_1b</tr>\n";
********}
****if ($this_level==2 && $expandnode1_on==TRUE){
********eval("\$Level_2b = \"$Level_2\";");
********echo "<tr>$Level_2b</tr>\n";
********}
****if ($this_level==3 && $expandnode2_on==TRUE){
********eval("\$Level_3b = \"$Level_3\";");
********echo "<tr>$Level_3b</tr>\n";
********}
}
echo "$closetag\n";

?>


menu.txt (config Datei)

+Home********index.php
+Library****library.php
++Documents****lib/documents.php
++Books****lib/books.php
**+++Hard Cover****lib/hardcover.php
+Map********map.php
+Search********http://www.google.com

sowie einer css

Könnte man dies irgendwie per Smarty an die templates/mein Template/boxes/box_categories.html übergeben? So könnte ich das Menü nach belieben platzieren. Welche Änderungen müsste ich da genau machen?

Gruss
Kopernikus

bluemoon
23.03.2006, 22:15
@kopernikus :

Du solltest ein neues Thema starten.

Dein Beitrag hat nicht wirklich etwas mit diesem Thema hier zu tun und vermutlich auch nicht gefunden werden.

Ist nicht böse gemeint :)

Kopernikus
23.03.2006, 22:45
Hallo bluemoon


Wieso ein neues Thema? Mhystbuster wollte doch auch solch ein Menü bei sich zusätzlich einbauen. So wie ich das sehe, ist ihm das schliesslich auch gelungen. Der einzige Unterschied welcher ich zu meinem Menü sehe ist, dass sein Menü ein animiertes ist und bereits Smarty Klassen beinhaltet und meines eben ausschliesslich aus php besteht. Da ich nicht weiss wie man eine Smarty Klasse einbaut frage ich ergänzend zu diesem Thema mal in die Runde.

Falls sich niemand meldet, kann ich immer noch ein neues Thema eröffnen.

Dennoch danke für den Hinweis - Habs auch nicht böse aufgefasst :)

Gruss
Kopernikus

hendrik
23.03.2006, 23:38
@Kopernikus

Dein Menücode macht direkte Ausgaben (echo). Das darf nicht sein. Schreib' dein Programm um so, daß die direkten Ausgaben anstelle dessen in einer Variable gespeichert werden. Am Ende des Codes sollte eine Variable stehen welche den HTML-Code deines Menüs enthält. z.B. $my_menu. Mach dir am besten ne Funktion welche den HTML-Code zurück gibt.

2. Der Code muss an die Smarty-Engine übergeben werden mittels
$[smarty-obj.varibalennamen]->assign('MY_MENU', $my_menu).
Damit definierst du einen neuen Smarty-Platzhalter.

3. In der entspr. Templatedatei fügst du den Platzhalter ein. z.B. {$MY_MENU}

Um sagen zu können wo du deinen Menücode zu implantieren hast muss man wissen wo exakt dein Menü erscheinen soll. Welche Box? Oder neue Box? Oder ganz woanders?
Gruss
Hen

HarryBoo
23.03.2006, 23:55
Hallo Kopernikus,

erst mal ein herzliches willkommen im Forum.

Ich freue mich da du den Weg zu uns gefunden hast :)

''>ZITAT</div>Wieso ein neues Thema?[/b]

Da muss ich Bluemoon recht geben.
Ein neues Thema beginnt immer oben.
Beispiel.
So, nun hat jemand eine Frage und der Suchende gibt einen Suchbegriff ein der zu deiner Frage passt.
Er landet dann in diesem Thread und findet bei den ersten Beiträgen keinen Bezug. Weg ist er und er hätte nur gaaaaanz weit nach unten scrollen müssen um die Lösung zu finden. Hat er aber nicht :( .

Bin auch der Meinung, sich nicht in einen Thread einzuklinken, sondern lieber einen Neuen aufmachen.
Dann bleibt es übersnichtlicher.

In diesem Fall war es, weil noch nicht zu viele Beiträge da waren, OK.
Nur für die Zukunft und für alle die mitlesen ;)

Grüße vom
HarryBoo

bluemoon
24.03.2006, 00:35
''>ZITAT(Kopernikus @ Mar 23 2006, 22:45) 2286
Hallo bluemoon
Wieso ein neues Thema? Mhystbuster wollte doch auch solch ein Menü bei sich zusätzlich einbauen. So wie ich das sehe, ist ihm das schliesslich auch gelungen. Der einzige Unterschied welcher ich zu meinem Menü sehe ist, dass sein Menü ein animiertes ist und bereits Smarty Klassen beinhaltet und meines eben ausschliesslich aus php besteht. Da ich nicht weiss wie man eine Smarty Klasse einbaut frage ich ergänzend zu diesem Thema mal in die Runde.

Falls sich niemand meldet, kann ich immer noch ein neues Thema eröffnen.

Dennoch danke für den Hinweis - Habs auch nicht böse aufgefasst :)

Gruss
Kopernikus
[/b]

kein Problem ;

dennoch wäre aufgrund der Komplexität des Themas ein neuer Thread besser ;

Wenn Du Smarty einbauen willst, solltest Du Dir die Smarty-Anleitung zu Gemüthe führen und dich auf viel Arbeit gefasst machen ;

oder aber Du fragst Mythbuster, ob er sein Script zur Verfügung stellt