Smarty | PHP Variable in Array Variable von Smarty verwenden

  • Heyho,
    und zwar wollte ich fragen, ob es möglich ist, einen variable von php in eine Array Struktur von Smarty zu verwenden.
    Ich habe es im moment so aber es gibt mir nur den error "undefined index i"


  • Kaliber:
    Der Error kommt weiterhin,
    Wenn es weiterhilft, mit der Klasse setze ich die variablen.

    PHP
    <?phpclass Project {	static protected $dataArray = array();	public static function getAllProjects()	{		$query = System::GetDB()->SendQuery("SELECT * FROM ctw_project ORDER BY (id) DESC;");		while($query_data = System::getDB()->FetchObject($query))		{			$i = $query_data->id;			self::$dataArray[$i]["id"] = $query_data->id;			self::$dataArray[$i]["Name"] = $query_data->Name;			self::$dataArray[$i]["Type"] = $query_data->Type;			self::$dataArray[$i]["Path"] = $query_data->Path;			self::$dataArray[$i]["Text"] = $query_data->Text;			self::$dataArray[$i]["Source"] = $query_data->Source;		}		return self::$dataArray;	}	public static function assign() {		$data = self::getAllProjects();		$projectArray = array(			"Count" => count($data),			"Data" => $data		);		System::getTPL()->assign('Project',$projectArray);	}}


    Und direkt danach lasse ich das Template anzeigen.

  • Einfach aus

    PHP
    SELECT * FROM ctw_project ORDER BY (id) DESC

    PHP
    SELECT * FROM ctw_project ORDER BY (id) ASC

    machen.


    Edit: Du hast da vermutlich sowieso einen Denkfehler. Es müsste eigentlich mit dem foreach und der ursprünglichen Query alles richtig anzeigen.

  • Ist ja nicht so, als gäbe es in Smarty keine count (ähnliche) Funktion um damit eine for-Schleife Rückwärts laufen zu lassen.
    Kann mir nicht auch nicht so recht vorstellen, dass du mit Smarty im PHP Tag wieder Smarty ausgeben kannst/sollst :/.


    http://www.smarty.net/docsv2/de/language.function.php.tpl

    Zitat

    Dieses Tag ist nur für erfahrene Benutzer gedacht und wird auch von diesen normalerweise nicht benötigt.


    //Edit:
    http://www.smarty.net/forums/v…d316096d05651c34f909#9546
    Schon bischen her bei mir mit Smarty aber so ging es mMn früher.

  • Um die Aussage der count Funktion aufzugreifen ein Beispiel könnte so aussehen.

    <ul class="mainMenuItems">
    {foreach from=$mainMenuItems item=itemID}
    {counter print=false assign=value}
    <li {if $value == 1} class="active" {/if}>
    <a href="#">{$itemID}</a>
    </li>
    {/foreach}
    </ul>


    print steht für eine direkte Ausgabe , via assign kannst du dem counter eine Bezeichnung geben hier value. du kannst jedoch dem counter auch ein anfangswert zuweisen und diesen runter zählen lassen.


    Code
    {counter start=10 skip=2 direction =down print=false assign=value}


    siehe dazu auch
    http://www.smarty.net/docsv2/d…uage.function.counter.tpl


    // Nebenfrage


    Dürfte ich dich Fragen Slash wieso du Smarty verwendest ^^ ?

  • Ich nehm euch beide mal zusammen, da es ähnelt ^^
    Wenn ich den Query ändere und es beispielsweise mit ner for schleife angehen würde, würde die schleife ja praktisch von 1-x gehen und das möchte ich ja nicht, zumindest kam das bei meinem ersten versuch bei raus, wo ich noch mit der smarty eigenen {for} funktion gearbeitet habe.


    Das mit dem ausgeben im php tag funktioniert schon, allerdings nur wenn ich für die variable i eine zahl an der stelle einsetze.
    Aber ich weiß noch nicht so ganz wie mit die count funktion von dir weiterhelfen soll, da ich ja eigentlich nur nach einer schleife suche die rückwärts lauft, als smartyfunktion, oder halt das ich die php variable direkt da verwenden kann.


    Ein weiterer gedanke war es über den {assign} tag zu machen, allerdings kann ich da keine variablen setzen.


    IPrototypeI:
    Jetzt ergibt die counter funktion doch sinn ^^
    Ich versuch es gleich mal für meinen zweck so umzuschrieben.
    Klar darfst du fragen, und zwar verwende ich es, um eine codetrennung zwischen front und backend vorzunehmen, gerade bei dynamischen werten die aus der datenbank kommen, oder bei sprachvariablen.
    Ich denke mal du willst darauf hinaus das ich den php tag genutzt habe, allerdings auch nur wegen der schleife ^^

  • Ich denke mal du willst darauf hinaus das ich den php tag genutzt habe, allerdings auch nur wegen der schleife ^^


    Naja, meine Antwort hat es nicht genau beantwortet, aber du der aussage was den php tag betrifft , du kannst auch den inhalt den du übergeben willst an ein array übergeben und dieses als templatesvariable registrieren und via foreach- schleife ausgeben. Aber zurück zu meiner Frage, ich hab vor paar Tagen auch angefangen mich mit Templateengines auseinander zu setzen, darunter auch Smarty und mir wurde gesagt das es eine bessere Templateengine gäbe, diese wäre Blade, welches in der Laravel Framework enthalten ist ^^.

  • Ich hab es jetzt mit der obrigen hilfestellung, etwas abgewandelt, doch hinbekommen, Danke an alle :)

    HTML
    {foreach name=Projects item=id from=$Project.Count}					<div class="item featured text-center">						<h3 class="title"><a href="#" target="_blank">{$Project.Data.$id.Name}</a></h3>						<div class="featured-image">							<a href="#" >								<img class="img-responsive project-image" src="assets/images/projects/{$id}.png"/>							</a>							<div class="ribbon">								<div class="text">{$Project.Data.$id.Type}</div>							</div>						</div>					</div>					<hr class="divider" />				{/foreach}

    Spoiler anzeigen

    und die Klasse soweit verändert.

    PHP
    <?phpclass Project {	static protected $dataArray = array();	static protected $dataCount = array();	public static function getAllProjects()	{		$query = System::GetDB()->SendQuery("SELECT * FROM ctw_project ORDER BY (id) DESC;");		while($query_data = System::getDB()->FetchObject($query))		{			$i = $query_data->id;			self::$dataArray[$i]["id"] = $query_data->id;			self::$dataArray[$i]["Name"] = $query_data->Name;			self::$dataArray[$i]["Type"] = $query_data->Type;			self::$dataArray[$i]["Path"] = $query_data->Path;			self::$dataArray[$i]["Text"] = $query_data->Text;			self::$dataArray[$i]["Source"] = $query_data->Source;			array_push(self::$dataCount, $i);		}		return self::$dataArray;	}	public static function assign() {			$data = self::getAllProjects();		$projectData = array(			"Count" => self::$dataCount,			"Data" => $data		);		System::getTPL()->assign('Project',$projectData);	}}


    IPrototypeI:
    Ach so meintest du das^^ ich dachte das war bezogen als "für sowas brauchst du das nicht" oder so ^^
    Naja ich hab arbeite schon ne ganze weile damit, ich griff zu smarty weil es sehr simpel aussah und ich hinter den ganzen php frameworks irgendwie nicht durchgesehen habe, bzw. ich es für meine zwecke nicht brauchte, daher Smarty.
    Aber was ist denn an Blade anders, bzw. besser als an smarty? :)