|
Smarty
WARNING: All discussion is moving to https://reddit.com/r/smarty, please go there! This forum will be closing soon. |
|
View previous topic :: View next topic |
Author |
Message |
subprime Smarty Rookie
Joined: 08 Dec 2007 Posts: 10
|
Posted: Sat Dec 08, 2007 10:26 am Post subject: Smarty und Xajax |
|
|
Hallo, ich habe ein kleines oder grösseres Problem und weiß echt nicht mehr weiter. Ich habe hier aus dem Forum mir einen Thread über Smarty und Xajax angeschaut und dachte auch noch das ist garnicht so schwer. Allerdings musste ich feststellen das anscheinend Fehler im Code waren von dort... ich hab schon ein paar beseitigt aber der Code will aufm Server immernoch net laufen
hier mal der Code.
sollte jemand änderungsvorschläge haben werde ich sie hier ausprobieren
index.php
Code: |
<?php
/**
* Logintest
*
* @version 1.0
* @copyright 2007
*/
session_start();
// Laden der einzelnen Klassen
require_once($_SERVER['DOCUMENT_ROOT'] .'/includes/header.php');
$menue = array();
$menue[1] = 'Home';
$menue[2] = 'Test2';
$menue[3] = 'Test';
$menue[4] = 'Ansagen';
$menue[5] = 'Anlegen';
$menue[6] = 'Impressum';
$menue[7] = 'Kontakt';
$smarty = new Smarty;
$smarty->force_compile=1;
$smarty->caching=0;
$smarty->debugging=true;
$xajax = new xajax("/includes/boxes/login.php");
$xajax->registerFunction("initLayout");
$xajax->registerFunction("login");
$xajax->processRequest();
//$xajax->debugOn();
$smarty->assign("xajax_javascript",$xajax->getJavascript("/js/xajax/"));
$smarty->display("index.tpl");
?>
|
includes/boxes/login.php
Code: |
<?
function login($aFormValues) {
// new xajaxResponse Object
$objResponse = new xajaxResponse();
//clear error fields
$objResponse->assign("error_userpass","innerHTML"," ");
$objResponse->assign("error_username","innerHTML"," ");
//check for username
if ($aFormValues['username'] == "test") {
if ($aFormValues['userpass'] == "test") {
// login successfull. set your session variables here
$_SESSION['username'] = "tester";
$_SESSION['user_id'] = 1;
// load the basic layout
$objResponse->loadcommands(initLayout(array()));
}
else {
// password error
$objResponse->assign("error_userpass","innerHTML","invalid password");
}
}
else {
// username error
$objResponse->assign("error_username","innerHTML","unknown user");
}
return $objResponse;
}
function initLayout($aFormValues){
global $smarty;
$objResponse = new xajaxResponse();
// instead of display() we use fetch() to get the template output
$html = $smarty->fetch("layout.tpl");
// assign the html code
$objResponse->assign("layout","innerHTML",$html);
return $objResponse;
}
?>
|
includes/header.php
Code: |
<?php
/**
* Logintest
*
* @version 1.0
* @copyright 2007
*/
/*
* Ausgabesteuerung aktivieren
*/
/*
* Prüfen ob Datenverbindungsdaten vorhanden
*/
if(file_exists(dirname(__FILE__) . "/config.php"))
{
include(dirname(__FILE__) . "/config.php");
}
else
{
echo "Keine Datenverbindung vorhanden";
}
/*
* Klassen includen
*/
include(dirname(__FILE__) . "/../js/xajax/xajax_core/xajax.inc.php");
include(dirname(__FILE__) . "/class.main.php");
include(dirname(__FILE__) . "/../smarty/Smarty.class.php");
include(dirname(__FILE__) . "/class.database.php");
?>
|
templates/index.tpl
Code: |
<!--{config_load file="$language/$language.ini" section=""}-->
<!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">
<head>
<title>Smarty + XAJAX</title>
<meta http-equiv="Content-Type" loginwindow="text/html; charset=uf8" />
<style type="text/css"><!--
/* <![CDATA[ */
{literal}
body {
background-color: #e1ddd9;
font-size: 12px;
font-family: Verdana, Arial, Helvetica, SunSans-Regular, Sans-Serif;
color:#564b47;
padding:0px;
margin:0px;
}
#loginwindow {
position:absolute;
height:200px;
width:400px;
margin:-100px 0px 0px -200px;
top: 50%;
left: 50%;
text-align: left;
padding: 0px;
background-color: #f5f5f5;
border: 1px solid #666;
overflow: auto;
}
p, h1 {
margin: 0px;
padding: 10px;
}
h1 {
font-size: 13px;
text-transform:uppercase;
text-align: center;
color: #564b47;
background-color: #e0e0e0;
border-top:1px solid #333;
border-bottom:1px solid #333;
}
a {
color: #ff66cc;
font-size: 11px;
background-color:transparent;
text-decoration: none;
}
.formlabel {
margin-left:10px;
float:left;
width:80px;
font-weight:bold;
}
.formfield {
margin-left:10px;
float:left;
width:150px;
}
.formerror {
color:red;
float:left;
}
/* ]]> */
--></style>
{/literal}
{$xajax_javascript}
</head>
<body>
<div id="layout">
{include file="login.tpl"}
</div>
</body>
</html>
|
templates/layout.tpl
Code: |
<div style="float:left;width:300px;border-right:1px solid #000;">
<h1>Menu</h1>
<ul>
<li>menu1</li>
<li>menu2</li>
<li>menu3</li>
</ul>
</div>
<div style="float:left;width:500px;overflow:auto;height:100%;">
<h1>Welcome {$smarty.session.username}</h1>
</div>
|
und zu guter letzt noch
templates/login.tpl
Code: |
<div id="loginwindow">
<p align="right">
<h1>Smarty & XAJAX</h1>
<p><b>Please login with test:test</b><br /><br />
</p>
<div>
<form id="loginform" action="" onsubmit="xajax_login(xajax.getFormValues('loginform'));return false;">
<div class="formlabel">username:</div>
<div class="formfield"><input type="text" name="username" id="username" /></div>
<div class="formerror" id="error_username"> </div>
<br style="clear:both" />
<div class="formlabel">password:</div>
<div class="formfield" id="userpass">
<input type="text" name="userpass" id="userpass" />
</div>
<div class="formerror" id="error_userpass"> </div>
<br style="clear:both" />
<div class="formlabel">
</div>
<div class="formfield">
<input type="submit" value="login" />
</div>
<br style="clear:both" />
</form>
</div>
</div>
|
Last edited by subprime on Thu Dec 27, 2007 3:27 pm; edited 2 times in total |
|
Back to top |
|
DaKaLKa Smarty Regular
Joined: 23 Apr 2006 Posts: 99 Location: Ketsch, Germany
|
Posted: Sat Dec 08, 2007 11:42 am Post subject: |
|
|
Hi subprime,
kann du bitte etwas konkreter mit deiner Fehlerbeschreibung werden.
So wie es aussieht, macht dein xajax absolut nix, den es wird auf der Seite nicht aufgerufen. Desweiteren hast du für den Login überhaupt keine Eingabemöglichkeiten.
Also, so wie es ausseiht, möchstest du die zwei Methoden "initLayout" und "login" in xajax für Javascript sichtbar machen. Das ist nämlich das, was xajax unter anderem macht : PHP-Funktionen für Javascript zur
Verfügung zu stellen.
Deine index.php registriert die beiden funktionen für xajax und gibt auf der Seite auch das entsprechende Javascript aus, allerdings verwendest du die Funktionen niergens.
Irgendwo auf deiner Seite muss du die funktionen ja aufrufen und zwar in JavaScript-Syntax. Z.B. :
<button onClick="xajax_login();"></button>
oder bein initLayout könntest du folgendes machen :
<body onLoad="xajax_initLayout();"> (in deinem Body-Tag)
Desweiteren ein kleiner Tipp : du solltest den CSS-Code aus deiner template/index.tpl in eine eigene CSS-Datei auslagern und diese im Template referenzieren.
Viel Erfolg. |
|
Back to top |
|
subprime Smarty Rookie
Joined: 08 Dec 2007 Posts: 10
|
Posted: Sat Dec 08, 2007 12:00 pm Post subject: |
|
|
hatte ausversehen nicht das richtige tpl gepostet sondern 2 mal das gleiche...
wegen dem css. das hab ich nur aus dem thread wo das sample ist schnell mitgenommen sonst ist css auch extra |
|
Back to top |
|
DaKaLKa Smarty Regular
Joined: 23 Apr 2006 Posts: 99 Location: Ketsch, Germany
|
Posted: Sat Dec 08, 2007 12:17 pm Post subject: |
|
|
Hmm,
ich habs mir nun nochmal angeschaut mir der korrigierten Version. Kann jedoch auf den ersten Blick keinen Fehler finden.
Falls du Firefox als Browser verwendest, dann hol dir mal das Add-on "Firebug" (https://addons.mozilla.org/de/firefox/addon/1843), dort kannst du AJAX-Anfragen besser debuggen bzw. überhaupt anschauen. Falls du kein Firefox verwendest - dann verwende ihn. In Kombination mit Firebug unschlagbar zur Entwicklung.
Hoffe das hilft etwas weiter.
Ciao, DaKaLKa |
|
Back to top |
|
subprime Smarty Rookie
Joined: 08 Dec 2007 Posts: 10
|
Posted: Sat Dec 08, 2007 12:29 pm Post subject: |
|
|
thx für die schnelle rere antwort ^^
Hab Firefox und auch Firebug... leider ha ich da mindestens 2 fehler gefunden, alklerdings nicht den der anscheinend noch vorhanden ist.
Falls jemand noch eine idee ha oder du nochmals vielleicht in ruhe zeit hast wär ich echt dankbar
***/ EDIT /***
Wenn ich mir das mit Firebug anschaue kann man ja erkennen, dass
die daten abgesendet werden anhand von POST
Code: |
xjxargs[] <xjxobj><e><k>username</k><v>test</v></e><e><k>userpass</k><v>test</v></e></xjxobj>
xjxfun login
xjxr 1197116982984
|
RESPONSE
den response teil versteh ich nicht... was soll das ^^ |
|
Back to top |
|
DaKaLKa Smarty Regular
Joined: 23 Apr 2006 Posts: 99 Location: Ketsch, Germany
|
Posted: Sat Dec 08, 2007 3:28 pm Post subject: |
|
|
So wie es aussieht, bekommst du keine Antwort vom Server.
Ich hab zwar xajax schon länger nicht mehr konfigurieren müssen, da ich dafür eine entsprechend Klasse verwende, allerdings ist es so, das das Skript, das du im xajax-Konstruktor übergibts, auch die Antwort bearbeiten muss.
Beispiel :
$xajax = new xajax("ajax.php");
ajax.php :
Code: |
$xajax = new xajax("ajax.php");
$xajax->registerFunction("initLayout");
$xajax->registerFunction("login");
$xajax->processRequests();
|
So, d.h. deine ajax-Anfrage werden von der ajax.php "beantwortet". Es ist dann natürlich sehr nützlich, sich entsprechende Funktionen zu schreiben, da man die registerFunction-Aufrufe sowohl im Skript, das die Funktion verwendet, wie auch im Skript, das die Anfragen beantwortet verwenden muss.
Ich hoffe jetzt klappts.
Übrigens, weiß ich nicht genau, ob das bei der "aktuellen" xajax 0.5 Version noch alles so funktioniert, da ich noch mit der xajax 0.2.x-Version arbeite.
Ciao, DaKaLKa |
|
Back to top |
|
subprime Smarty Rookie
Joined: 08 Dec 2007 Posts: 10
|
Posted: Sun Dec 09, 2007 2:01 pm Post subject: |
|
|
DaKaLKa wrote: | Es ist dann natürlich sehr nützlich, sich entsprechende Funktionen zu schreiben, da man die registerFunction-Aufrufe sowohl im Skript, das die Funktion verwendet, wie auch im Skript, das die Anfragen beantwortet verwenden muss.
|
Was meinst du den genau damit ? das hab ich nicht ganz verstanden...
Zu dem was du weiter oben geschrieben hast...
$xajax = new xajax("/includes/boxes/login.php");
hier wird das doch gemacht oder ? |
|
Back to top |
|
DaKaLKa Smarty Regular
Joined: 23 Apr 2006 Posts: 99 Location: Ketsch, Germany
|
Posted: Sun Dec 09, 2007 2:15 pm Post subject: |
|
|
Naja, xajax funktioniert so :
1.) Du hast ein Skript, das die Anfragen beantwortet. Diese Skript, muss die Methode "processRequests()" vom xajax-Objekt ausführen. Diese führt dazu, das eine Anfrage beantwortet werden kann.
2.) Du muss natürlich deinen Skripten sagen, welches Skript die "Antwort" liefert, dies machst du durch den Konstruktor.
Also hier ein mini-Beispiel :
index.php
<?php
$xajax = new xajax("antwort.php");
$xajax->registerFunction("click");
?>
<div onClick="xajax_click()">Klick mich</div>
antwort.php:
<?php
$xajax = new xajax("ajax.php");
$xajax->registerFunction("click");
$xajax->processRequests();
?>
Somit würde ein Klick auf das Div-Tag die Funktion "click" aufrufen. Natürlich fehlen in diesem kleinen "Beispiel" die Ausgaben des von xajax generierten Javascripts ($xajax->getJavascript), sowie die Implementierung der "click"-Funktion. Aber das sollte eigentlich klar sein.
In deinem Beispiel verwendest du
$xajax = new xajax("/includes/boxes/login.php");
D.h. deine xajax-Anfrage wird an die login.php geschickt. Dummerweise verarbeitet deine login.php diese Anfragen nicht ($xajax->processRequests(); ), und deswegen klappt das Ganze nicht.
Hoffe das war nun ausführlicher und verständlich.
Ciao, DaKaLKa |
|
Back to top |
|
q_no Smarty Rookie
Joined: 22 Nov 2005 Posts: 13 Location: germany
|
Posted: Fri Dec 14, 2007 10:03 pm Post subject: |
|
|
subprime, so wie es scheint hast du das Tutorial aus dem xajax forum kopiert das wiederum auf xajax 0.5 beruht. Die Lösungsvorschläge enthalten teilweise aber Funktionen aus 0.2.x.
In 0.5 ->procressRequest();
In 0.2 ->procressRequests();
Laut den übermittelten Daten hast du allerdings 0.5 installiert. Also nicht durcheinander kommen mit der unterschiedlichen Syntax. DaKaLKa hat aber Recht was die generelle Funktionsweise von Xajax angeht - da hat sich ansonsten nicht viel geändert. _________________ $_REQUEST - WHAT YOU $_POST IS WHAT YOU $_GET |
|
Back to top |
|
subprime Smarty Rookie
Joined: 08 Dec 2007 Posts: 10
|
Posted: Fri Dec 14, 2007 10:36 pm Post subject: |
|
|
hehe das dachte ich mir auch mit dem unterschied, dass ich es mal ausprobiert hatte mit procressRequests(); und mir eine entsprechende fehlermeldung ausgegeben wurde das das nicht funkt. ja ich hab das aus nem anderem thread und dachte das üprobier ich mal aus mit xajax allerdings war auch der code falsch und ich bin hier fast am verzweifeln |
|
Back to top |
|
q_no Smarty Rookie
Joined: 22 Nov 2005 Posts: 13 Location: germany
|
Posted: Fri Dec 14, 2007 10:41 pm Post subject: |
|
|
Ja, ich muss zugeben dass sich in dem geposteten Quelltext ein paar Tippfehler eingeschlichen haben Asche auf mein Haupt.
Wenn du noch ein konkretes Problem und oder Fragen mit Xajax in Verbindung mit Smarty hast dann nur zu, und/oder schau mal bei #xajax auf irc.freenode.net vorbei. Tagsüber findest du dort auch deutschsprachigen Support Gleich nebenan befindet sich auch #smarty.
Gruß
q_no _________________ $_REQUEST - WHAT YOU $_POST IS WHAT YOU $_GET |
|
Back to top |
|
subprime Smarty Rookie
Joined: 08 Dec 2007 Posts: 10
|
Posted: Fri Dec 14, 2007 10:54 pm Post subject: |
|
|
habs gelöst grade, aber kann den sourcecode erst morgen mittag posten für alle die das gleiche Problem haben in Ajax mit smarty den einstieg zu finden |
|
Back to top |
|
subprime Smarty Rookie
Joined: 08 Dec 2007 Posts: 10
|
Posted: Sat Dec 15, 2007 5:52 pm Post subject: |
|
|
Hier die lösung
index.php
Code: |
<?php
session_start();
// Laden der einzelnen Klassen
require_once($_SERVER['DOCUMENT_ROOT'] .'/includes/header.php');
$menue = array();
$menue[1] = 'Home';
$menue[2] = 'Test2';
$menue[3] = 'Test';
$menue[4] = 'Ansagen';
$menue[5] = 'Anlegen';
$menue[6] = 'Impressum';
$menue[7] = 'Kontakt';
$smarty = new Smarty;
$smarty->config_dir = SMARTY_DIR;
$smarty->template_dir = $_SERVER['DOCUMENT_ROOT'].'/templates';
$smarty->compile_dir = $_SERVER['DOCUMENT_ROOT'].'/templates_c';
$smarty->caching = FALSE;
$smarty->compile_check = TRUE;
$smarty->debugging = TRUE;
$xajax = new xajax("/includes/boxes/login.php");
$xajax->registerFunction('initLayout', 'login.php');
$xajax->registerFunction('login', 'login.php');
$xajax->processRequest();
//$xajax->setFlags('debug',true);
$smarty->assign("xajax_javascript",$xajax->getJavascript("/js/xajax/"));
$smarty->display("index.tpl");
?>
|
includes/header.php
Code: |
<?php
/*
* Klassen includen
*/
include_once($_SERVER['DOCUMENT_ROOT'].'/js/xajax/xajax_core/xajax.inc.php');
include_once($_SERVER['DOCUMENT_ROOT'].'/smarty/Smarty.class.php');
?>
|
includes/boxes/login.php
Code: |
<?
require_once($_SERVER['DOCUMENT_ROOT'].'/index.php');
function login($aFormValues) {
// new xajaxResponse Object
$objResponse = new xajaxResponse();
//clear error fields
$objResponse->assign("error_userpass","innerHTML"," ");
$objResponse->assign("error_username","innerHTML"," ");
//check for username
if ($aFormValues['username'] == "test") {
if ($aFormValues['userpass'] == "test") {
// login successfull. set your session variables here
$_SESSION['username'] = "tester";
$_SESSION['user_id'] = 1;
// load the basic layout
$objResponse->loadcommands(initLayout(array()));
}
else {
// password error
$objResponse->assign("error_userpass","innerHTML","invalid password");
}
}
else {
// username error
$objResponse->assign("error_username","innerHTML","unknown user");
}
return $objResponse;
}
function initLayout($aFormValues){
global $smarty;
$objResponse = new xajaxResponse();
// instead of display() we use fetch() to get the template output
$html = $smarty->fetch("layout.tpl");
// assign the html code
$objResponse->assign("layout","innerHTML",$html);
return $objResponse;
}
?>
|
und nun die erforderlichen tpl dateien
templates/index.tpl
Code: |
<!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">
<head>
<title>Smarty + XAJAX</title>
<meta http-equiv="Content-Type" loginwindow="text/html; charset=uf8" />
<style type="text/css"><!--
/* <![CDATA[ */
{literal}
body {
background-color: #e1ddd9;
font-size: 12px;
font-family: Verdana, Arial, Helvetica, SunSans-Regular, Sans-Serif;
color:#564b47;
padding:0px;
margin:0px;
}
#loginwindow {
position:absolute;
height:200px;
width:400px;
margin:-100px 0px 0px -200px;
top: 50%;
left: 50%;
text-align: left;
padding: 0px;
background-color: #f5f5f5;
border: 1px solid #666;
overflow: auto;
}
p, h1 {
margin: 0px;
padding: 10px;
}
h1 {
font-size: 13px;
text-transform:uppercase;
text-align: center;
color: #564b47;
background-color: #e0e0e0;
border-top:1px solid #333;
border-bottom:1px solid #333;
}
a {
color: #ff66cc;
font-size: 11px;
background-color:transparent;
text-decoration: none;
}
.formlabel {
margin-left:10px;
float:left;
width:80px;
font-weight:bold;
}
.formfield {
margin-left:10px;
float:left;
width:150px;
}
.formerror {
color:red;
float:left;
}
/* ]]> */
--></style>
{/literal}
{$xajax_javascript}
</head>
<body>
<div id="layout">
{include file="login.tpl"}
</div>
</body>
</html>
|
templates/layout.tpl
Code: |
<div style="float:left;width:300px;border-right:1px solid #000;">
<h1>Menu</h1>
<ul>
<li>menu1</li>
<li>menu2</li>
<li>menu3</li>
</ul>
</div>
<div style="float:left;width:500px;overflow:auto;height:100%;">
<h1>Welcome {$smarty.session.username}</h1>
</div>
|
templates/login.tpl
Code: |
<div id="loginwindow">
<p align="right">
<h1>Smarty & XAJAX</h1>
<p><b>Please login with test:test</b><br /><br />
</p>
<div>
<form id="loginform" action="" onsubmit="xajax_login(xajax.getFormValues('loginform'));return false;">
<div class="formlabel">username:</div>
<div class="formfield"><input type="text" name="username" id="username" /></div>
<div class="formerror" id="error_username"> </div>
<br style="clear:both" />
<div class="formlabel">password:</div>
<div class="formfield" id="userpass">
<input type="text" name="userpass" id="userpass" />
</div>
<div class="formerror" id="error_userpass"> </div>
<br style="clear:both" />
<div class="formlabel">
</div>
<div class="formfield">
<input type="submit" value="login" />
</div>
<br style="clear:both" />
</form>
</div>
</div>
|
Wie gesagt das sample ist nicht von mir sonder das hab ic hier auch ausm forum... hatte etwas gesucht um smarty und xajax zu verbinden und naja jetzt mehr oder weniger erfolgreich geschafft.
ich hoffe ich konnte auch anderen und mir helfen |
|
Back to top |
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|
|