Smarty Forum Index Smarty
WARNING: All discussion is moving to https://reddit.com/r/smarty, please go there! This forum will be closing soon.

Smarty und Xajax

 
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Smarty Forum Index -> Language: German
View previous topic :: View next topic  
Author Message
subprime
Smarty Rookie


Joined: 08 Dec 2007
Posts: 10

PostPosted: Sat Dec 08, 2007 10:26 am    Post subject: Smarty und Xajax Reply with quote

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","&nbsp;");
   $objResponse->assign("error_username","innerHTML","&nbsp;");

   //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 &amp; 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">&nbsp;</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">&nbsp;</div>
        <br style="clear:both" />
        <div class="formlabel">
          &nbsp;
        </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
View user's profile Send private message
DaKaLKa
Smarty Regular


Joined: 23 Apr 2006
Posts: 99
Location: Ketsch, Germany

PostPosted: Sat Dec 08, 2007 11:42 am    Post subject: Reply with quote

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
View user's profile Send private message
subprime
Smarty Rookie


Joined: 08 Dec 2007
Posts: 10

PostPosted: Sat Dec 08, 2007 12:00 pm    Post subject: Reply with quote

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 Wink sonst ist css auch extra
Back to top
View user's profile Send private message
DaKaLKa
Smarty Regular


Joined: 23 Apr 2006
Posts: 99
Location: Ketsch, Germany

PostPosted: Sat Dec 08, 2007 12:17 pm    Post subject: Reply with quote

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
View user's profile Send private message
subprime
Smarty Rookie


Joined: 08 Dec 2007
Posts: 10

PostPosted: Sat Dec 08, 2007 12:29 pm    Post subject: Reply with quote

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. Sad

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
Code:

Loading...


den response teil versteh ich nicht... was soll das ^^
Back to top
View user's profile Send private message
DaKaLKa
Smarty Regular


Joined: 23 Apr 2006
Posts: 99
Location: Ketsch, Germany

PostPosted: Sat Dec 08, 2007 3:28 pm    Post subject: Reply with quote

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
View user's profile Send private message
subprime
Smarty Rookie


Joined: 08 Dec 2007
Posts: 10

PostPosted: Sun Dec 09, 2007 2:01 pm    Post subject: Reply with quote

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
View user's profile Send private message
DaKaLKa
Smarty Regular


Joined: 23 Apr 2006
Posts: 99
Location: Ketsch, Germany

PostPosted: Sun Dec 09, 2007 2:15 pm    Post subject: Reply with quote

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
View user's profile Send private message
q_no
Smarty Rookie


Joined: 22 Nov 2005
Posts: 13
Location: germany

PostPosted: Fri Dec 14, 2007 10:03 pm    Post subject: Reply with quote

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. Smile 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
View user's profile Send private message Visit poster's website
subprime
Smarty Rookie


Joined: 08 Dec 2007
Posts: 10

PostPosted: Fri Dec 14, 2007 10:36 pm    Post subject: Reply with quote

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 Sad
Back to top
View user's profile Send private message
q_no
Smarty Rookie


Joined: 22 Nov 2005
Posts: 13
Location: germany

PostPosted: Fri Dec 14, 2007 10:41 pm    Post subject: Reply with quote

Ja, ich muss zugeben dass sich in dem geposteten Quelltext ein paar Tippfehler eingeschlichen haben Embarassed 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 Smile Gleich nebenan befindet sich auch #smarty.

Gruß
q_no
_________________
$_REQUEST - WHAT YOU $_POST IS WHAT YOU $_GET
Back to top
View user's profile Send private message Visit poster's website
subprime
Smarty Rookie


Joined: 08 Dec 2007
Posts: 10

PostPosted: Fri Dec 14, 2007 10:54 pm    Post subject: Reply with quote

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 Wink
Back to top
View user's profile Send private message
subprime
Smarty Rookie


Joined: 08 Dec 2007
Posts: 10

PostPosted: Sat Dec 15, 2007 5:52 pm    Post subject: Reply with quote

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","&nbsp;");
   $objResponse->assign("error_username","innerHTML","&nbsp;");

   //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 &amp; 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">&nbsp;</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">&nbsp;</div>
        <br style="clear:both" />
        <div class="formlabel">
          &nbsp;
        </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 Wink
Back to top
View user's profile Send private message
Display posts from previous:   
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Smarty Forum Index -> Language: German All times are GMT
Page 1 of 1

 
Jump to:  
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
Protected by Anti-Spam ACP