На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Есть хостинг 100mb.net и PHP4 на нём , проблемы
    Для разработки своих сайтов я использую FastTemplate.
    Для облегчения работы набил кучу функций.
    Вот одна из них:
    ExpandedWrap disabled
      function dynadef ( $ft_obj, $var, $templates ) {
        foreach( $templates as $t ) {
          $ft_obj->define_dynamic( $t, $var );
        }
      }

    Функция принимает указатель на объект FastTemplate, имя шаблона и массив имён динамических шаблонов,
    затем для каждого элемента массива производится определение дин.шаблона в главном шаблоне.

    В общем, ничего сложного. Удобно.

    Я обычно веду разработку на PHP5, а на хостинге PHP4, да видать ещё настройки подкручены.

    Вместо
    ExpandedWrap disabled
      dynadef( $F, 'main', array( 'itemlist', 'itemlistitem', 'form' ) );

    приходится писать
    ExpandedWrap disabled
      $F->define_dynamic( 'itemlist', 'main');
      $F->define_dynamic( 'itemlistitem', 'main');
      $F->define_dynamic( 'form', 'main');


    Также приходится заменять
    ExpandedWrap disabled
      $F = $GLOBALS['F'];
    на
    ExpandedWrap disabled
      global $F;


    Это сильно напрягает. Что делать???
      Цитата RaD @
      $F = $_GLOBALS['F'];

      http://php.net/globals

      Уж сколько раз твердили миру - приводить надо РЕАЛЬНЫЙ код, а не выдумки из головы - но до людей всё равно, видимо, не доходит, что выдумки и реальность - зачастую две большие разницы.
        $_GLOBALS['F'] --> $GLOBALS['F'] и использовать как раньше... :unsure:
          SiMM, ты не смог понять эту строчку?
          Сожалею форумчане, но товарищ написал целый коммент в котором ни слова по теме.

          Почему там работает:
          ExpandedWrap disabled
            global $F;

          и не работает:
          ExpandedWrap disabled
            $F = $GLOBALS['F'];

          Вот в чём вопрос!
            RaD, ну тогда покажи как ты их задешь, эти переменные...
              Вот оригинальный код, который отлично работает под PHP5:
              ExpandedWrap disabled
                <?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();
                 
                ?>
                До описания функций я не вижу строчки:

                ExpandedWrap disabled
                  $GLOBALS['F'] = $F;
                  Осталось пояснить, зачем???

                  ExpandedWrap disabled
                    rad@bk-rpopov:~$ egrep "^register_globals" /etc/php5/apache2/php.ini
                    register_globals = Off ;


                  Добавлено
                  Но меня больше интересует почему не работает функция dynadef (описанная в начале) на этом долбанном хостинге.
                    Цитата RaD @
                    Осталось пояснить, зачем???

                    чтобы заработало в ПХП4

                    Цитата RaD @
                    почему не работает функция dynadef

                    ExpandedWrap disabled
                      function dynadef ( &$ft_obj, $var, $templates ) {
                        foreach( $templates as $t ) {
                          $ft_obj->define_dynamic( $t, $var );
                        }
                      }

                    Возможно так...
                      Посмотрим. Результаты отпишу.
                        Всё помогло.

                        Только вот дешевле использовать просто global чем $GLOBALS[].

                        Добавлено
                        Закрыто
                          Цитата RaD @
                          Только вот дешевле использовать просто global чем $GLOBALS[].
                          Дешевле вообще не использовать глобальные переменные.
                          Сообщение отредактировано: SiMM -
                            А как-же тогда быть с функцией fillListItems? Посмотри как она используется.
                              Ну а нафига юзать столь неудобный класс MySQL? Получается какое-то недоООП.

                              Добавлено
                              И, кстати, не удивляйтесь, когда оно однажды опять перестанет работать. При чём - даже на PHP5. О причинах сказано по раннее приведённой ссылке.
                              Цитата RaD @
                              $vars = array_merge( $HTTP_POST_VARS, $HTTP_GET_VARS );
                              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                              0 пользователей:


                              Рейтинг@Mail.ru
                              [ Script execution time: 0,0377 ]   [ 14 queries used ]   [ Generated: 20.05.24, 10:15 GMT ]