Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.219.213.27] |
|
Сообщ.
#1
,
|
|
|
Для разработки своих сайтов я использую FastTemplate.
Для облегчения работы набил кучу функций. Вот одна из них: function dynadef ( $ft_obj, $var, $templates ) { foreach( $templates as $t ) { $ft_obj->define_dynamic( $t, $var ); } } Функция принимает указатель на объект FastTemplate, имя шаблона и массив имён динамических шаблонов, затем для каждого элемента массива производится определение дин.шаблона в главном шаблоне. В общем, ничего сложного. Удобно. Я обычно веду разработку на PHP5, а на хостинге PHP4, да видать ещё настройки подкручены. Вместо dynadef( $F, 'main', array( 'itemlist', 'itemlistitem', 'form' ) ); приходится писать $F->define_dynamic( 'itemlist', 'main'); $F->define_dynamic( 'itemlistitem', 'main'); $F->define_dynamic( 'form', 'main'); Также приходится заменять $F = $GLOBALS['F']; global $F; Это сильно напрягает. Что делать??? |
Сообщ.
#2
,
|
|
|
Цитата RaD @ $F = $_GLOBALS['F']; http://php.net/globals Уж сколько раз твердили миру - приводить надо РЕАЛЬНЫЙ код, а не выдумки из головы - но до людей всё равно, видимо, не доходит, что выдумки и реальность - зачастую две большие разницы. |
Сообщ.
#3
,
|
|
|
$_GLOBALS['F'] --> $GLOBALS['F'] и использовать как раньше...
|
Сообщ.
#4
,
|
|
|
SiMM, ты не смог понять эту строчку?
Сожалею форумчане, но товарищ написал целый коммент в котором ни слова по теме. Почему там работает: global $F; и не работает: $F = $GLOBALS['F']; Вот в чём вопрос! |
Сообщ.
#5
,
|
|
|
RaD, ну тогда покажи как ты их задешь, эти переменные...
|
Сообщ.
#6
,
|
|
|
Вот оригинальный код, который отлично работает под PHP5:
<?php // $Id: admin-items.php,v 1.2 2007-04-16 18:08:46 rad Exp $ // Конфигурация require( "config.php" ); require( "common_functions.php" ); require( "classes/fasttemplate.php" ); require( "classes/mysql.php" ); require( "classes/string.php" ); checkSession(); // получаем значения переменных $vars = array_merge( $HTTP_POST_VARS, $HTTP_GET_VARS ); $I = new MySQL; $I->Open( $aDBhttp ); $S = new String; // Подготавливаем шаблон страницы. $F = new FastTemplate( "templates/" ); $F->define( array( 'header' => "page_header.html", 'footer' => "page_footer.html", 'main' => "admin-tpl.html", 'select' => "select.html", 'body' => "admin-items.html" ) ); // указываем, что в шаблоне body есть динамическая часть dynadef( $F, 'main', array( 'menu-buttons' ) ); dynadef( $F, 'body', array( 'itemslist', 'itemslistitem', 'createitems' ) ); dynadef( $F, 'select', array( 'selectitem' ) ); // Заголовок страницы. $F->assign( array( 'PAGE_TITLE' => 'Административная часть', 'ENCODING' => $page_encoding, // см. config.tpl 'FAV_ICON_URL' => '/pics/icons/url_icon.png', 'CSS_URL' => '/css/admin.css', 'JAVASCRIPT_INCLUDES' => '' ) ); $F->parse( 'PAGE_HEADER', "header" ); // Низ страницы. $F->parse( 'PAGE_FOOTER', "footer" ); // Отобразим элементы интерфейса шаблона (см. common_functions.php) foreach( $aMenuButtons as $a ) { //dumpArray( $a ); $F->assign( array( 'MENU_BUTTON_TITLE' => $a[0], 'MENU_BUTTON_URL' => $a[1] ) ); $F->parse( 'MENU_BUTTONS', '.menu-buttons' ); } // ----------- $F->assign( array( "PAGE_NAME" => "Список товаров", "PAGE_URL" => "/man/items/list" ) ); switch( $vars['mode'] ) { case 'list': dynadrop( $F, array( 'createitems' ) ); function fillListItems( $D ) { $F = $GLOBALS['F']; $enabled_url = ( $D->enabled == 1 ) ? "online" : "offline"; $F->assign( array( "LIST_EDIT_URL" => "/man/items/edit/" . $D->id, "LIST_DESC" => htmlspecialchars( $D->title, ENT_QUOTES ), "CATEGORIE" => htmlspecialchars( $D->cat, ENT_QUOTES ), "PRICE" => $D->price, "SPECPRICE" => $D->specprice, "STATUS_URL" => "/pics/admin/presence-" . $enabled_url . ".png" ) ); $F->parse( 'ITEMSLISTITEM', '.itemslistitem' ); } $SQL = "SELECT I.id, I.title, I.price, I.specprice, I.enabled, C.title cat " . "FROM items I, categories C WHERE I.cat_id=C.id ORDER BY I.id"; $numrows = $I->GetRows( $SQL, fillListItems ); if ( $numrows == 0 ) { dynadrop( $F, array( 'itemslistitem' ) ); } break; case 'add': dynadrop( $F, array( 'itemslist' ) ); function fillListItems( $D ) { $F = $GLOBALS['F']; $F->assign( array( "SELECTID" => $D->id, "SELECTNAME" => $D->title, "SELECTSELECTED" => "" ) ); $F->parse( 'SELECTITEM', '.selectitem' ); } $SQL = "SELECT id, title FROM categories ORDER BY id"; $numrows = $I->GetRows( $SQL, fillListItems ); if ( $numrows == 0 ) { dynadrop( $F, array( 'selectitem' ) ); } $F->parse( 'SELECT', 'select' ); $F->assign( array( "FORM_MODE" => "create", "ITEM_ID" => "", "TITLE" => "", "SHORT" => "", "DESC" => "", "PRICE" => "0,00", "SPECPRICE" => "нет", "ITEM_ENABLED" => "" ) ); $F->parse( 'CREATEITEMS', '.createitems' ); break; case 'edit': isOkNum( $vars['id'], "идентификатор товара" ); dynadrop( $F, array( 'itemslist' ) ); $SQL = "SELECT id FROM attach WHERE item_id='" . $vars['id'] . "'"; $attach_id = $I->GetRecord( $SQL )->id; $SQL = "SELECT * FROM items WHERE id='" . $vars['id'] . "'"; $R = $I->GetRecord( $SQL ); $F->assign( array( "FORM_MODE" => "edit", "ITEM_ID" => $R->id, "TITLE" => htmlspecialchars( $R->title, ENT_QUOTES ), "SHORT" => htmlspecialchars( $R->short, ENT_QUOTES ), "DESC" => htmlspecialchars( $R->description, ENT_QUOTES ), "PRICE" => $R->price, "SPECPRICE" => $R->specprice, "PIC_ID" => $vars['id'], "ITEM_ENABLED" => ( $R->enabled == 1 ) ? "checked" : "" ) ); $F->parse( 'CREATEITEMS', '.createitems' ); function fillListItems( $D ) { $F = $GLOBALS['F']; $F->assign( array( "SELECTID" => $D->id, "SELECTNAME" => $D->title, "SELECTSELECTED" => ( $D->catid == $D->id ) ? "selected" : "" ) ); $F->parse( 'SELECTITEM', '.selectitem' ); } $SQL = "SELECT id, title, '" . $R->cat_id . "' as catid FROM categories ORDER BY id"; $numrows = $I->GetRows( $SQL, fillListItems ); if ( $numrows == 0 ) { dynadrop( $F, array( 'selectitem' ) ); } $F->parse( 'SELECT', 'select' ); break; } $F->parse( 'PAGE_BODY', 'body' ); // Вывод шаблона $F->parse( 'MAIN', 'main' ); // Вывод контента. $F->FastPrint(); ?> |
Сообщ.
#7
,
|
|
|
До описания функций я не вижу строчки:
$GLOBALS['F'] = $F; |
Сообщ.
#8
,
|
|
|
Осталось пояснить, зачем???
rad@bk-rpopov:~$ egrep "^register_globals" /etc/php5/apache2/php.ini register_globals = Off ; Добавлено Но меня больше интересует почему не работает функция dynadef (описанная в начале) на этом долбанном хостинге. |
Сообщ.
#9
,
|
|
|
Цитата RaD @ Осталось пояснить, зачем??? чтобы заработало в ПХП4 Цитата RaD @ почему не работает функция dynadef function dynadef ( &$ft_obj, $var, $templates ) { foreach( $templates as $t ) { $ft_obj->define_dynamic( $t, $var ); } } Возможно так... |
Сообщ.
#10
,
|
|
|
Посмотрим. Результаты отпишу.
|
Сообщ.
#11
,
|
|
|
Всё помогло.
Только вот дешевле использовать просто global чем $GLOBALS[]. Добавлено Закрыто |
Сообщ.
#12
,
|
|
|
Цитата RaD @ Дешевле вообще не использовать глобальные переменные. Только вот дешевле использовать просто global чем $GLOBALS[]. |
Сообщ.
#13
,
|
|
|
А как-же тогда быть с функцией fillListItems? Посмотри как она используется.
|
Сообщ.
#14
,
|
|
|
Ну а нафига юзать столь неудобный класс MySQL? Получается какое-то недоООП.
Добавлено И, кстати, не удивляйтесь, когда оно однажды опять перестанет работать. При чём - даже на PHP5. О причинах сказано по раннее приведённой ссылке. Цитата RaD @ $vars = array_merge( $HTTP_POST_VARS, $HTTP_GET_VARS ); |