как в переменную вставить функцию :)

  • Автор темы Striche
  • Дата начала
Статус
В этой теме нельзя размещать новые ответы.
S

Striche

Прохожие
:bc: Тема названна коряво - но суть проблемы в:
В БД хронится дизайн, в зависимости от условий бирется разный, вставляется на страницу через
PHP:
echo $res[Header];
, в дизайн надо вставить функцию, переменную - у меня они распознаются как текст (html теги).
 
возможно функция eval тебе поможет )
 
возможно функция eval тебе поможет )
пробывал, но не получилось :ah:
покажите пример, и будет мне счастье :)
есть переменная $res[Header], она представляет из сабя текст: $res[Header]="<bla-bla tegi> ".Funct(2)."";
Как сделать, что бы при: echo $res[Header]; ".Funct(2)." распозновалась как функция (и выполнялась).
Покажите пример, как надо ставить ковычки(") внутри $res[Header] (надо ли их экранировать), как правильно вставить функцию или переменную. Как это вывести на экран. Получиться всего пара строк, так толко не получается :(
 
вот функция:
PHP:
function ViewSubdivision ($ID, $LVL)
 {
	global $db_prefix;
	global $LVL;
	$LVL++;
	$result = mysql_query('SELECT Sub_ID,Parent_ID,Sub_Name,Sub_URL,Hidden_URL,Template_ID,Class_ID,Description,Keywords,Created,LastUpdated FROM '.$db_prefix.'Subdivision WHERE (Parent_ID = "'.$ID.'") ORDER BY Sub_ID') or $mysql_error();
	if (!mysql_num_rows($result)) return;
	echo '<ul>';
	while($unit = mysql_fetch_array($result)){
		echo '<li>';
		echo '<a href=/'.$unit[Hidden_URL].'/>'.$unit[Sub_Name].'</a>';
		ViewSubdivision($unit[Sub_ID], $LVL);
		$LVL--;
	}
	echo '</ul>';
 }
вот содержимое "$templ[Header]":
Код:
<html>

<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">
</head>

<body leftmargin=0 rightmargin=0 bottommargin=0 topmargin=0 bgcolor=#3D0103>
".ViewSubdivision(10,0)."
Листинг фунции, которая "строит" html-страницу
PHP:
// до этого идет запрос к БД
$str = $templ[Header];
eval ("\$str = \"$str\";");
echo $str;
echo $messa;
echo $templ[Footer];

Получается:
HTML:
<ul><li><a href=/bisnestravel/tourism/1/>1</a><ul><li><a href=/bisnestravel/tourism/1/11/>2a</a><ul><li><a href=/bisnestravel/tourism/1/11/ssylka/>Еще подраздел</a></ul></ul></ul><html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>

<body leftmargin=0 rightmargin=0 bottommargin=0 topmargin=0 bgcolor=#3D0103>
а должно быть:
HTML:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>

<body leftmargin=0 rightmargin=0 bottommargin=0 topmargin=0 bgcolor=#3D0103>
<ul><li><a href=/bisnestravel/tourism/1/>1</a><ul><li><a href=/bisnestravel/tourism/1/11/>2a</a><ul><li><a href=/bisnestravel/tourism/1/11/ssylka/>Еще подраздел</a></ul></ul></ul>
Мне кажется косяк в нутри функции "ViewSubdivision" - но это только кажется :nezn:
Наставьте меня на путь истинный, буду очень благодарен.
P.S. делаю подобиее CMS (добавление разделов, редактирование текста). В определенном макете дизайна надо вывести меню (дерево подразделов). - CMS построена по примеру NetCat
 
А где у тебя хранится содержимое $templ[Header]? Нельзя ли просто сделать так: хранить в файлике твой хедер, но потом, в скрипте просто объединить содержимое файла и результат работы функции:
Код:
$templ[Header] = $data_from_file.ViewSubdivision(10,0);
и никаких eval тут не надо
 
А где у тебя хранится содержимое $templ[Header]? Нельзя ли просто сделать так: хранить в файлике твой хедер, но потом, в скрипте просто объединить содержимое файла и результат работы функции:
Код:
$templ[Header] = $data_from_file.ViewSubdivision(10,0);
и никаких eval тут не надо

PHP:
$templ = mysql_query('SELECT Template_ID,Parent_Template_ID,Template_Name,Settings,Header,Footer,CSS FROM '.$db_prefix.'Template WHERE (Template_ID = "'.$sub[Template_ID].'") ORDER BY Template_ID') or $mysql_error();
$templ = mysql_fetch_assoc($templ);
PHP:
$templ[Header] = $data_from_file.ViewSubdivision(10,0);
Это пойдет если функцию вставлять после [headr], а если надо вставить внутри [headr]? Люди же это как то делают, вот как?

P.S. уважаемммые модераторы, если удалили "нужный" пост, то оставьте коментарий: "почему удалили". Заранее спасибо.
 
Не пойму, зачем функцию вставлять внутри темплейта, это не есть правило хорошего тона. Обычно делают так:
Темплейт:
HTML:
My Text my text My Text my text My Text my text My Text my text [yourfunction] My Text my text
Код:
PHP:
$templ[Header] = str_replace("[yourfunction]", ViewSubdivision(10,0), $data_from_file);
 
команда echo не заносит в переменную текст, а непосредственно отправляет его сразу на вывод в браузер. поэтому, твой код, по-моему, надо чуть-чуть модифицировать.

Твой код:
Код:
function ViewSubdivision ($ID, $LVL) 
{ 
    global $db_prefix; 
    global $LVL; 
    $LVL++; 
    $result = mysql_query('SELECT Sub_ID,Parent_ID,Sub_Name,Sub_URL,Hidden_URL,Template_ID,Class_ID,Description,Keywords,Created,LastUpdated FROM '.$db_prefix.'Subdivision WHERE (Parent_ID = "'.$ID.'") ORDER BY Sub_ID') or $mysql_error(); 
    if (!mysql_num_rows($result)) return; 
    echo '<ul>'; 
    while($unit = mysql_fetch_array($result)){ 
        echo '<li>'; 
        echo '<a href=/'.$unit[Hidden_URL].'/>'.$unit[Sub_Name].'</a>'; 
        ViewSubdivision($unit[Sub_ID], $LVL); 
        $LVL--; 
    } 
    echo '</ul>'; 
}

Как я предлагаю:
Код:
function ViewSubdivision ($ID, $LVL) 
{ 
    global $db_prefix; 
    global $LVL; 
    $LVL++; 
    $result = mysql_query('SELECT Sub_ID,Parent_ID,Sub_Name,Sub_URL,Hidden_URL,Template_ID,Class_ID,Description,Keywords,Created,LastUpdated FROM '.$db_prefix.'Subdivision WHERE (Parent_ID = "'.$ID.'") ORDER BY Sub_ID') or $mysql_error(); 
    if (!mysql_num_rows($result)) return; 
    $ret = '<ul>'; 
    while($unit = mysql_fetch_array($result)){ 
        $ret .= '<li>'; 
        $ret .= '<a href=/'.$unit[Hidden_URL].'/>'.$unit[Sub_Name].'</a>'; 
        ViewSubdivision($unit[Sub_ID], $LVL); 
        $LVL--; 
    } 
    $ret .= '</ul>'; 
    
    return $ret;
}

---
или же использовать функции работы с буфером.

Твой код:
Код:
$str = $templ[Header]; 
eval ("\$str = \"$str\";"); 
echo $str; 
echo $messa; 
echo $templ[Footer];

Как я предлагаю:
Код:
ob_start();
	$templ[Header];
	$str = ob_get_contents();
ob_end_clean();
	eval ("\$str = \"$str\";"); 
	echo $str; 
	echo $messa; 
	echo $templ[Footer];


А если будешь использовать echo без буферизации, то ничё у тебя не выйдет. ечо будет выдаваться раньше кода, просто занесенного в переменную.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху