PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : eigene PHP-Seite im Portal



McWitty
28.08.2006, 12:11
Support-Maske:

Version vom wbb: 2.2.1
Version vom JGS-Portal: 3.1.0
Link zum Board: http://kga-kastanienhain.de/
Test-Account: k.A.
PHP-Version: 4.3.10 (Das ist vom Webspace auf localhost verwende ich PHP Version 5.0.4
Link zur PHP-Info-Datei: http://kga-kastanienhain.de/php.php
Suchfunktion genutzt mit: meincode.php, eigene seite einbinden, eigener code portal, eigenes php im portal, php in portal einfügen


genaue Beschreibung:

Ich habe ein kleines Addon für eine Kleingartenkolonie geschrieben, mit dem man die zum Verkauf stehenden Parzellen ausgeben kann. Die Eingaben dafür werden über das ACP gemacht.
Die Templates und das PHP-Script fürs ACP funzen bestens, nur mit dem Einbau des Scriptes ins Portal habe ich Probleme.

Da ich es offline mit XAMPP schreibe habe ich mal ein Screenshot mit angehängt.

http://kga-kastanienhain.de/parzelle.png

Wie man sieht, wir das Template f_parzelle_view ausgeführt, aber obwohl sechs Parzellen in der Datenbank stehen wird nichts angezeigt. Ich bin mir jetzt nicht sicher, ob das Template f_parzelle_viewbit nicht ausgeführt wird, oder der gesamte PHP-code und wo das Problem liegt.

hier der PHP-Code:



if($seiteninfos[seiten_text]=="[Parzelle]"){
$jgs_tpl_parser_off="1";
$lang->load('REGISTER,GLOBAL,PARZELLE');



if (isset($_REQUEST['action'])) $action = $_REQUEST['action'];
else $action = "view";

/*Abfrage des Usernamen*/
function getuser($userid, $db, $n){
$user = $db->query_first("SELECT username FROM bb".$n."_users WHERE userid = '$userid'");
$username = $user[username];
return $username;
}


/*Parzelle ansehen*/
if ($action == 'view') {

$count = 0;
$f_parzelle_viewbit = '';
$result = $db->query("SELECT * FROM bb".$n."_parzelle ORDER BY parz ASC");
while ($row = $db->fetch_array($result)) {
$rowclass = getone($count++, "tablea", "tableb");
eval("\$seiteninfos['seiten_text'] = \"".$tpl->get("f_parzelle_viewbit")."\";");
}

$lang->items['LANG_PARZELLE_TITLE'] = $lang->get("LANG_PARZELLE_TITLE", array('$anzahl' => $count));
eval("\$seiteninfos['seiten_text'] = \"".$tpl->get("f_parzelle_view")."\";");

}

/*Parzelle anzeigen*/
if ($action == "show") {


$fp = $db->query_first("SELECT * FROM bb".$n."_parzelle WHERE id = '$id'");

eval("\$seiteninfos['seiten_text'] = \"".$tpl->get("f_parzelle_show", 1)."\",1);");
}
}


Hier das Template f_parzelle_view:

<?xml version="1.0" encoding="{$lang->items['LANG_GLOBAL_ENCODING']}"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="{$lang->items['LANG_GLOBAL_DIRECTION']}" lang="{$lang->items['LANG_GLOBAL_LANGCODE']}" xml:lang="{$lang->items['LANG_GLOBAL_LANGCODE']}">

<head>
<title>$master_board_name | {$lang->items['LANG_PARZELLE_TITEL']}</title>
$headinclude
<meta http-equiv="Content-Type" content="text/html;charset={$lang->items['LANG_GLOBAL_ENCODING']}" />
<link rel="stylesheet" href="css/main.css" />
</head>
<body>

<table cellpadding="6" cellspacing="0" border="0" width="100%" align="center">

<tr class="tableb">
<td colspan="4"><p>
<if($wbbuserdata[userid]=="0")>
<then>{$lang->items['LANG_GLOBAL_USERCBAR_HELLO_GUEST']}</then>
<else>{$lang->items['LANG_GLOBAL_USERCBAR_HELLO']} $wbbuserdata[username]</else></if>,<br/>
Hier sind unsere Parzellen aufgelistet, die zur Zeit zum Verkauf stehen. Bitte auf "Details" klicken um weitere Einzelheiten zu den jeweiligen Parzellen sehen.</td>
</tr>
<tr class="tablecat" align="center">
<td width="25%"><b>{$lang->items['LANG_PARZELLE_TITLE_NAME']}</b></td>
<td width="25%"><b>{$lang->items['LANG_PARZELLE_FLAECHE']}</b></td>
<td width="25%"><b>{$lang->items['LANG_PARZELLE_BILD']}</b></td>
<td width="25%"><b>{$lang->items['LANG_PARZELLE_DETAILS']}</b></td>
</tr>
$f_parzelle_viewbit
<tr class="tablecat">
<td colspan="4" align="center">{$lang->items['LANG_PARZELLE_FOOTER']}</td>
</tr>
</table>
</body>
</html>

Das Template f_parzelle_viewbit:

<tr class="$rowclass" border="1">
<td width="25%">{$lang->items['LANG_PARZELLE_VIEWBIT']}
&nbsp;&nbsp;$row[parz]</td>
<td width="25%">$row[flaeche] m&#xB2;</td>
<td width="25%">
<if($row[bild_n]=="")>
<then><img src="{$style['imagefolder']}/parz_foto_rot.gif" border="0" /></then><else>
<img src="{$style['imagefolder']}/parz_foto_gruen.gif" border="0" /></else></if></td>
<td width="25%"><b><a href="?action=show&id=$row[id]&sid=$session[hash]">Details</a></b></td>
</tr>

Diese Stelle habe ich in der jgs_portal.php geändert:


// eigenen Code einbinden Start
require("./jgs_portal_include/f_parzelle.php");

Und das hier in jgs_portal_box.php:

// eigenen Code einbinden Start
require("./jgs_portal_include/f_parzelle.php");


Da ich da jetzt schon mehrer Tage hänge, würde ich mich riesig freuen, wenn mir jemand auf die Sprünge helfen könnte. Ich beschäfftige mich erst seit kurzer Zeit mit PHP wirklich intensiv und vermute daher, das es ein Anfängerfehler ist. Ausserdem habe ich diverse Flüchtigkeitsfehler von mir bereits gefunden, vielleicht habe ich einen übersehen.

Vielen Dank

Witty

P.S.: Die Anleitungen hier im Board habe ich gelesen und bin der Meinung alles korrekt gemacht zu haben.

Rene123
28.08.2006, 13:31
Moin Moin,

den Beitrag von Jens kennst du schon?

http://jgs-xa.de/thread.php?threadid=710&sid=


Gruß Rene

McWitty
28.08.2006, 13:38
Original von McWitty
P.S.: Die Anleitungen hier im Board habe ich gelesen und bin der Meinung alles korrekt gemacht zu haben.


Moin zurück :]
Ja, habe ich gelesen. Dieses Post Scriptum bezog sich auf genau den Thread.
Eigentlich bin ich der Meinung, das ich auch alles genauso gemacht habe - mal abgesehen von der Tatsache, das die Angaben sich ja auf ein ältere Portalversion beziehen und daher nur schwer nachvollziehbar sind und das ich nicht die meincode.php genutzt habe (abgesehen von den php-Tags <?php und ?> ist da ja auch nix dolles drin), weil ich noch weitere Addons einbauen möchte und nicht überall meincode1.php / meincode2.php / meincode3.php stehen haben wollte.
In den Codeschnippseln sieht man das ja eigentlich auch, oder habe ich etwas aus der Anleitung übersehen?
Ausserdem steht am Ende der Anleitung. das bald eine Anleitung für das einbinden von PHP-Code folgt. Die Anleitung beschreibt eigentlich nur die Einbindung der Templates, die bei mir ja funktionieren, wie man auf dem Snapshot von mir sieht.

Rene123
28.08.2006, 19:08
Deinen php code packst du einfach in die jgs_portal_meincode.php und zwar zwischen die markierungen.

Solltest du noch weitere sachen einbauen, packst du die ebenfalls in die gleiche jgs_portal_meincode.php

Gruß Rene

McWitty
28.08.2006, 19:35
Hmm, okay, probiere ich zu Hause mal aus (bin grade auf Arbeit :D). Dann wird die meincode.php wohl anders eingebunden als eine normale PHP-Seite? Ich hatte dort ausser den PHP Start- und Endtags nichts weiter gesehen und dachte deshalb, das es auch mit einer "normalen" PHP Seite gehen müßte.

Melde mich wenn es geklappt hat

Danke und bis später

Witty

McWitty
29.08.2006, 01:01
Ich hatte es fast befürchtet. Leider funktioniert es auch mit der jgs_portal_meincode.php nicht. Ist ja auch im Prinzip das gleiche was ich vorher hatte.
Ich bin für jeden weiteren Vorschlag offen, da mir die Ideen für eine Fehlersuche ausgehen.
Kann mir denn jemand sagen, ob ich eventuell einen Fehler in meinem Code habe?

McWitty
29.08.2006, 18:00
Nochmal zu meinem Problem.
Wie ich heute Nacht schon schrieb hat mich der hinweis mit der jgs_portal_meincode.php nicht weitergebracht, da es sich im Prinzip um das gleiche handelt was ich vorher gemacht habe. Ich habe lediglich mein script in f_parzelle.php umbenannt, in den jgs_portal_include Ordner gepackt und den Pfad unter von der jgs_portal_maincode.php auf untenstehenden Code geändert.
jetzt habe ich den Originalpfad zur jgs_portal_meincode.php aus der.zip-Datei der Installation in die jgs_portal.php (und jgs_portal_box.php) zurüch kopiert und den Code in die jgs_portal_meincode.php übertragen, die noch unangetastet war. Das Ergebnis ist immer noch dasselbe. Ein template wird ausgeführt und das viewbit_template nicht.
Leider weiß ich nicht, wie ich prüfen kann, ob es nun der PHP-Code ist, oder ob "nur" das template aus irgendeinem grund nicht ausgeführt wird.


Wäre schön, wenn mir jemand helfen könnte.

eeleater
29.08.2006, 21:02
schon mal dran gedacht, dass der code "[Parzelle]" auch in eine Portalbox muss?

edit: das mit dem if $action = xxx darf eigentlcih net in den portal box code, dadraus müsstest du zwei codes machen

McWitty
30.08.2006, 00:08
Original von eeleater
schon mal dran gedacht, dass der code "[Parzelle]" auch in eine Portalbox muss?

Da man oben auf dem Bild sieht, das ein template zumndestens ausgeführt wird erübrigt sich wohl die Frage.


edit: das mit dem if $action = xxx darf eigentlcih net in den portal box code, dadraus müsstest du zwei codes machen

Hmm, darüber habe ich hier nirgends etwas lesen können. Werde ich mal testen, würde einiges erklären.

Auf jedenfall Danke schon mal für die Hilfe

Witty

McWitty
30.08.2006, 12:40
Das wars wohl auch nicht. Habe den Code entsprechend geändert und die if ($action...) Abfrage gelöscht und trotzdem wid mir nichts ausser das view-template angezeigt.

Hier mal die aktuelle jgs_portal_meincode.php:

<?php
################################################
## (c) 2002-2005 by JGS-XA.de ##
################################################
## // Eigene Erweiterungen Start // ##
## Bitte zwischen diese Markierungen einfügen ##
################################################
## ##
###### ######
#### ####
## ##
if($seiteninfos[seiten_text]=="[Parzelle]"){

$jgs_tpl_parser_off="1";
$lang->load('REGISTER,GLOBAL,PARZELLE');





/*Parzelle ansehen*/
$count = 0;
$f_parzelle_viewbit = '';
$result = $db->query("SELECT * FROM bb".$n."_parzelle ORDER BY parz ASC");
if ($result['parz'] == "54") {
echo "Parzelle 54 vorhanden"
;};
while ($row = $db->fetch_array($result)) {
$rowclass = getone($count++, "tablea", "tableb");
eval("\$seiteninfos['seiten_text'] = \"".$tpl->get("f_parzelle_viewbit")."\";");
}

$lang->items['LANG_PARZELLE_TITLE'] = $lang->get("LANG_PARZELLE_TITLE", array('$anzahl' => $count));
eval("\$seiteninfos['seiten_text'] = \"".$tpl->get("f_parzelle_view")."\";");


}

## ##
#### ####
###### ######
## ##
################################################
## Bitte zwischen diese Markierungen einfügen ##
## // Eigene Erweiterungen Ende // ##
################################################
?>

Für mich sieht das so aus, als ob der gesamte PHP-Code nicht ausgeführt wird. da mir auch die zusätzliche echo Ausgabe nicht angezeigt wird, obwohl der Wert 54 vorhanden ist.

Anscheinend wird erst ab hier

$lang->items['LANG_PARZELLE_TITLE'] = $lang->get("LANG_PARZELLE_TITLE", array('$anzahl' => $count));
eval("\$seiteninfos['seiten_text'] = \"".$tpl->get("f_parzelle_view")."\";");
überhaupt irgendetwas geparst.
Bin langsam am verzweifeln. ZEND Studio kann mit dem Code-Analyzer keine ungereimtheiten im Code finden, also denke ich mal, das es das zusammenspiel mit dem Portal ist?

Hilfe

Witty

csicom
30.08.2006, 20:11
dann solltest du mal
eval("\$seiteninfos['seiten_text'] .=
nehmen, denn sonst überschreibst du die variable immer wieder, anstatt etwas anzufügen ;)

McWitty
31.08.2006, 00:55
Oh, vielen Dank. Kleiner Punkt, große Wirkung :D.
Es haut zwar noch nicht ganz hin, da jetzt das andere Template nicht mehr angezeigt wird, aber da probiere ich jetzt mal alleine weiter.
Wenn ich noch weiter Hilfe brauche kann ich doch hoffentlich noch mal anfragen.

Witty