За последние 24 часа нас посетили 50903 программиста и 1738 роботов. Сейчас ищет 891 программист ...

php не успевает за смарти

Тема в разделе "PHP для новичков", создана пользователем WarGot, 19 янв 2010.

  1. WarGot

    WarGot Активный пользователь

    С нами с:
    8 янв 2010
    Сообщения:
    55
    Симпатии:
    0
    Доброго времени суток. Возникла проблема.
    Использую smarty по следующей схеме

    1. index.php - подключение всех библиотек, в том числе смарти
    $smarty->display(index.tpl)
    2. index.tpl - шаблон. в нём подключаю шапку, тело, футер. В теле идёт вызов пхп функций (файл с функция подключал в index.php) которые обращаются к базе и генерят содержимое. Так вот проблема в том что при первом заходе на страницу блоки где должен быть результат работы функций пустые, после F5 всё отображается уже нормально.

    Проблема как на локале, так и на вдске в инете.

    Сталкивался кто-нить с таким ? Как решить проблему ?
     
  2. SDR

    SDR Активный пользователь

    С нами с:
    22 сен 2009
    Сообщения:
    244
    Симпатии:
    0
    код в студию. с куками или сессиями что-то скорее всего, а не в.. прости-господи <i>неуспевании</i> )

    зы: заголовок темы понравился. реально ржал. хотя я бы её переименовал в <i>php не успевает за smarty</i> =)))
     
  3. WarGot

    WarGot Активный пользователь

    С нами с:
    8 янв 2010
    Сообщения:
    55
    Симпатии:
    0
    С заголовком проблема была -)
    index.php
    Код (Text):
    1.  
    2. <?php
    3. /**
    4.  * @author WarGot
    5.  * @copyright 2009
    6.  * CORE
    7.  */
    8. error_reporting(7);
    9. // КУКИ
    10. if (empty($_COOKIE['lang'])){
    11.     setcookie("lang","ru",time()+3600,"/");
    12. }
    13. if (!empty($_GET['user_lang'])){
    14.     if ($_GET['user_lang'] == "ru" or $_GET['user_lang'] == "us"){
    15.         unset($_COOKIE['lang']);
    16.         setcookie("lang",$_GET['user_lang'],time()+3600,"/");
    17.         header('Location: /main');
    18.     }
    19. }
    20. // КУКИ
    21.  
    22. // подлючаем конфиг мускула
    23. include("libs/mysql/config.php");
    24. // подключаем класс для работы с мускулом
    25. require("libs/mysql/class.php");
    26. // подрубаемся к мускулу
    27. $db = new mysql($config['server'], $config['user'], $config['pass'], $config['database'], $config['tablePrefix']);
    28. $db->connect();
    29. unset($mysql_database,$mysql_password,$mysql_server,$mysql_user);
    30.  
    31. // include smarty class
    32. require_once('libs/smarty/Smarty.class.php');
    33. $smarty = new Smarty();
    34. include("functions.php");
    35. include("core.php");
    36.  
    37. // подгрузка различных опций из БД
    38. site_options();
    39.  
    40. $smarty->template_dir = 'templates/'.OPT_TEMPLATE."/";
    41. $smarty->compile_dir = 'templates_c/';
    42. $smarty->config_dir = 'configs/';
    43. $smarty->cache_dir = 'cache/';
    44.  
    45. $smarty->clear_all_cache();
    46. $smarty->caching = false;
    47. $smarty->caching = 0;
    48. //** раскомментируйте следующую строку для отображения отладочной консоли
    49. //$smarty->debugging = true;
    50.  
    51. // БЛОГ ОБРАБОТКИ ПЕРЕМЕННЫХ
    52. $module = clear_vars($_REQUEST['module']);
    53. $type = clear_vars($_REQUEST['type']);
    54. $action = clear_vars($_REQUEST['action']);
    55. $id = clear_vars($_REQUEST['id']);
    56. $pages = clear_vars($_REQUEST['pages']);
    57.  
    58. // обработка центрального блока
    59.  
    60. if (empty($module)){
    61.     $smarty->display('mordochka.tpl');
    62. } elseif (!empty($module)){
    63.     include("modules/".$module.".php");
    64.     $smarty->assign('module',$module.".tpl");
    65.     $smarty->display('index.tpl');
    66. }
    67. ?>
    index.tpl

    Код (Text):
    1.  
    2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    3. <html>
    4. <head>
    5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    6. <title>title</title>
    7. <link href="templates/default/css.css" rel="stylesheet" type="text/css">
    8.  
    9. <!--[if IE 6]>
    10. <link href="ie.css" rel="stylesheet" type="text/css">
    11. <![endif]-->
    12. </head>
    13.  
    14. <body>
    15.  
    16. <div id="page">
    17.  
    18. <div id="ie">
    19. <div id="header">
    20. <div id="logo"><a href="#"><img src="templates/nii/img/logo.png" alt="img"></a></div>
    21. <div id="wapka"></div>
    22. </div>
    23.  
    24. <div id="nav">
    25. <div id="rnavv"></div>
    26. <div id="rnav">
    27. {php}template_widget_file("main_left");{/php}
    28. </div>
    29. <div id="rnavn"></div>
    30. </div>
    31. <div id="mal">
    32. <div id="mal1"></div>
    33. <div id="mal2"></div>
    34. </div>
    35. <div id="lnav">
    36. {php}template_widget_file("main_right");{/php}
    37. </div>
    38. </div>
    39.  
    40.  
    41. <div id="niz">
    42.  
    43. <div id="ban">
    44. 2{php}template_widget_file("banners");{/php}2
    45. </div>
    46.  
    47.  
    48. <div id="news">
    49. <div id="fonv">
    50. <div id="new"><a href="#">Новости</a></div></div>
    51. <div id="novost">
    52. 1{php}template_widget_file("latest_news");{/php}1
    53. </div>
    54. <div id="fonn"></div>
    55. </div>
    56.  
    57.  
    58.  
    59. </div>
    60.  
    61. <div id="foot">
    62. <div id="footer">
    63. <p>Copyright</p>
    64. </div>
    65. </div>
    66. </div>
    67. </body>
    68. </html>
    Например функция template_widget_file которая у мну и глючит при вызове в шаблоне с помощью
    {php}template_widget_file("main_left");{/php}

    Код (Text):
    1.  
    2. // выводит виджет по запросу файла виджета
    3. function template_widget_file($file){
    4.     $template_widgets_echo = 1;
    5.     include("widgets/".$file.".php");
    6. }
    и наконец-то сам код виджета который инклудом идёт
    Код (Text):
    1.  
    2. <?php
    3. error_reporting(7);
    4. /**
    5.  * @author WarGot
    6.  * @copyright 2009
    7.  */
    8. // информация которая выводится в админке и частично используется виджетом
    9. $widget_info['title'] = "Информационный блок";
    10. $widget_info['desc'] = "Левый блок навигации для главной страницы";
    11. $widget_info['lang'] = "ru";
    12. $widget_info['version'] = "1";
    13. $widget_info['style'] = "one_level.tpl";
    14.  
    15. // функция виджета
    16. // ИМЯ ФУНКЦИИ состоит из слов template_widget_ и имени файла!!!!
    17. function template_widget_left_main(){
    18.     // запрашивает $db - получаем возможность работы с мускулом
    19.     global $db;
    20.     // делаем сам заброс
    21.     // определяем язык
    22.     if ($_COOKIE['lang'] == "ru"){$cat = 46;}
    23.     if ($_COOKIE['lang'] == "us"){$cat = 47;}
    24.  
    25.     $sql = "SELECT * FROM ".$db->pre."content WHERE content_type = 'pages' and content_category_id = '$cat'";
    26.     $rows = $db->query($sql);
    27.     $result = "<ul>";
    28.     while ($row = $db->fetch_array($rows)){
    29.         $result .= "<li><a href='/pages/{$row['content_id']}'>{$row['content_title']}</a></li>";
    30.     }
    31.     $result .= "</ul>";
    32.     return $result;
    33. }
    34.  
    35. if ($template_widgets_echo == 1){  
    36.     // отдаём шаблону виджета тайтл
    37.     echo template_widget_left_main();
    38. }
    39. ?>
    Понимаю что принцип работы жестокий. Но ведь работает, правда не с первого раза -(
     
  4. WarGot

    WarGot Активный пользователь

    С нами с:
    8 янв 2010
    Сообщения:
    55
    Симпатии:
    0
    SDR
    Твоя фраза относительно кукисов заставила код ещё раз перепроверить, так как на них вывод по языковой версии завязан. Неа, они тут не причём. Первый раз идёт полный игнор вызова php функции из шаблона. %)
     
  5. WarGot

    WarGot Активный пользователь

    С нами с:
    8 янв 2010
    Сообщения:
    55
    Симпатии:
    0
    up
    горю -)
     
  6. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    WarGot
    пошаговая отладка.

    Делаешь каждые 5-10 строк die('current line' . __LINE__);
    и по одной из них комментируешь сверху вниз.
    Попутно наблюдая куда заходит в функции.
     
  7. WarGot

    WarGot Активный пользователь

    С нами с:
    8 янв 2010
    Сообщения:
    55
    Симпатии:
    0
    Simpliest
    Понятно. Спасибо. Буду капать -)