Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [smarty] - bloki menu
Forum PHP.pl > Forum > PHP
kamiox
[php:1:0428340793]<?php
function wyswietl_menu($posx) {

$sql = "select * FROM $_SESSION[db_prefix]menu WHERE posx='$posx' AND status=1 ORDER BY posy";
$dane = $db -> Execute($sql);
while (!$dane->EOF) {
$dane->fields[2] = '?>'.$dane->fields[2].'<?'; /* dane znajdujące się pomiędzy <? a ?> */
$dane->fields[2] = eval(''.$dane->fields[2].''); // są wykonywane jako kod php
$dane->MoveNext();
} // while
return $dane;
} // function wyswietl_menu


$smarty -> assign("left_menu", wyswietl_menu('left'));
$smarty -> assign("right_menu", wyswietl_menu('right'))
?>[/php:1:0428340793]

Mam taki problem ze funkcja się wykonuje przed wygenerowaniem strony przez smarty. Jak mam przekazać do smarty wynik funkcji zeby smarty to wyswietlilo w miejscu gdzie mam w pliku .tpl taki kod:



[php:1:0428340793]<?php
{section name=i loop=$left_menu}
{$left_menu[i].text}
{/section}
?>[/php:1:0428340793]


On opowiada za wyswietlenie bloku menu.
Pewnie to jest lamerskie pytanie ale to mój 3 dzień ze smarty i adodb. A niestety nie mogłem nic znaleźć na forum na ten temat sad.gif

Bardzo prosze o pomoc co mam z tym zrobić.

Albo jakiś inny lepszy sposób na umieszczenie dynamicznych bloków menu.
spenalzo
[php:1:dd0930db3c]<?php
/*
** Wyciagamy dane
*/
$res=$db->execute("zapytanie");
$i=0;
while(!$res->EOF)
{
$ret[$i]["jakiespole1"]=$res->fields["pole1"];
$ret[$i]["jakiespole2"]=$res->fields["pole2"];
$i++;
$res->movenext();
}

/*
** Do smarty
*/
$tpl->assign("blok",$ret);
?>[/php:1:dd0930db3c]

A szablon moze wyglądać tak:
Kod
{section name="blok" loop=$blok}

<a href="{$blok[blok].jakiespole1}">{$blok[blok].jakiespole2}</a><br>

{/section}
kamiox
mhmm jeszcze nie testowałem tego kodu ale wydaje mi się, że w ten sposób nie uda mi się tego osiągnąć co chce.

Moje menu to nie tylko lista linków ale też inny kod php. Chciałem zrobić coś takiego jak np. jest w jportalu,

Że można umieszczać kod php w bloku menu wystarczyło dać
Kod
<? kod php ?>


Tekst który jest poza tymi znacznikami jest wyświetlany normalnie.

Takie coś można zobaczyć np. w jportalu ale on korzysta z innego systemu szablonów tam się umieszcza blok menu jako funkcje.

Mój problem polega na tym że nie umiem przekazać do smaty wyniku z funkcji eval($cos)
HaRy
a moze

[php:1:e0d4c52054]<?php
$str = '$smarty -> assign("costam",$wartosc);';
eval($str);
?>[/php:1:e0d4c52054]
kamiox
to napewno nie sad.gif założenie jest takie że jak dam
Kod
<? ?>
to mi wtedy ten skrypt wykona co jest pomiędzy znacznikami tylko problem jest taki jak już wygenerowany kod przekazać do smarty. jeśli nie dam tego kodu to mi go nie przetwarza.

Takie coś jak pisalem jest w jportalu ja chce podobne rozwiązanie ale w połączeniu ze smarty
Cudi
A może coś takiego:
[php:1:809cb0c4ef]<?php
eval('$dane->fields[2] = '.$dane->fields[2].';');
?>[/php:1:809cb0c4ef]
Tylko że to pod warunkiem że pozbędziesz sie <? i ?>. Istnieje także druga możliwość, nie wiem jak wygląda kod, czy uzywasz w nim echo, czy return, ale jeśli to pierwsze to możesz zastosować buforowanie wyjścia:
[php:1:809cb0c4ef]<?php
ob_start();
eval(''.$dane->fields[2].'');
$dane->fields[2] = ob_get_contents();
ob_end_flush();
?>[/php:1:809cb0c4ef]
kamiox
mhmm w blokach menu chcę mieć możliwośc wstawianie dowolnego kodu php ważne żeby tylko ten kod był pomiędzy znacznikami
Kod
<? ?>

Jeśli nie ma tych znaczników to nie będzie wykonywany. Ma to wygladać dokładnie tak jak w jportal są zorganiozowane bloki menu.
W smarty też chce żeby kod był maksymalnie prosty. Da sie coś takiego zrobić ?
spenalzo
Hmm to sie mija z celem szablonów - szablony są po to, żeby oddzilić jak najbardziej warstwe wizualną od skryptu.
kamiox
Cytat
Hmm to sie mija z celem szablonów - szablony są po to, żeby oddzilić jak najbardziej warstwe wizualną od skryptu.


Warstwa wizualna jest odzielona od skryptu, ja chce mieć poprostu możliwość
zarządzania blokami menu z poziomu panelu administracyjnego.

Mhmm, to w jaki sposób mogę tworzyć dynamiczne menu, jeśli nie będe mógł umieścić kodu php w blokach. Chodzi mi o coś takiego jak jest np. w jportal.

Da się to zrobić w smarty ? Jak Wy to robicie ?
Cudi
Ja pokazałem jak to robie, sposób z buforowaniem wyjścia powinien Cie satysfakcjonować. Jest jeszcze inne wyjście, moim zdaniem lepsze. Dajemy uzytkownikowi dwie mozliwości, albo wstukuje sobie normalnie zawartość menu, ale podaje ścieżke do pliku który będzie odpowiadał za jego wygenerowanie. Pliczek ten może nawet korzystać z parsera szablonów, my musimy tylko ten plik zaincludować. O ile dobrze pamiętam takie rozwiązanie było wykorzystane w php-nuke.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.