Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Не генерируются ссылки

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Александр_Тяпкин
Отправлено: 23 Января, 2012 - 15:18:36
Post Id



Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Янв. 2012  


Помог: 0 раз(а)




Всем привет!
У меня возникла проблема. На сайте есть разделы, но ссылки не генерируются. Должны быть вида example.com/index.php?DepartmentId=1 , но ссылки ведут просто на гланую страницу example.com/
Если ввожу вручную адрес в строку, то запрос работает нормально появляются категории.

Вот листинги:

departments_list.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.         // Отвечает за список отделов
  3.         class DepartmentsList {
  4.                 /* Public-переменные, доступные в шаблоне Smarty departments_list.tpl */
  5.                 public $mSelectedDepartment = 0;
  6.                 public $mDepartments;
  7.  
  8.                 // Конструктор считывает строку запроса как параметр
  9.                 public function __construct() {
  10.                 /* Если в строке запроса есть  DepartmentId, мы посещаем отдел */
  11.             if (isset($_GET['DepartmentId']))
  12.                         $this->mSelectedDepartment = (int)$_GET['DepartmentId'];
  13.                 }
  14.  
  15.                 /* Вызывает метод уровня логики приложения для считывания списка
  16.         отделов и создания соответствующих ссылок */
  17.                 public function init() {
  18.                 // Получаем список отделов из уровня логики приложения
  19.                 $this->mDepartments = Catalog::GetDepartments();
  20.                 // Создаем ссылки на отделы
  21.                 for ($i = 0; $i < count($this->mDepartments); $i++)
  22.                 $this->mDeparments[$i]['link_to_department'] =
  23.                     Link::ToDepartment($this->mDepartments[$i]['department_id']);
  24.                 }
  25.         }
  26. ?>


departments_list.tpl
PHP:
скопировать код в буфер обмена
  1. {* departments_list.tpl *}
  2. {load_presentation_object filename="departments_list" assign="obj"}
  3. {* Начало списка разделов *}
  4. <div class="box">
  5. <p class="box-title">Разделы</p>
  6. <ul>
  7. {* Перебираем элементы списка разделов *}
  8. {section name=i loop=$obj->mDepartments}
  9. {assign var=selected value=""}
  10. {* Преверяем, выделен ли раздел, чтобы определить, какой стиль CSS использовать *}
  11. {if ($obj->mSelectedDepartment == $obj->mDepartments[i].department_id)}
  12. {assign var=selected value="class=\"selected\""}
  13. {/if}
  14. <li>{* Генерируем ссылку для нового раздела в списке *}
  15. <a {$selected} href="{$obj->mDepartments[i].link_to_department}">
  16. {$obj->mDepartments[i].name}
  17. </a>
  18. </li>
  19. {/section}
  20. </ul>
  21. </div>
  22. {* End departments list *}


application.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.         // Ссылка на библиотеку Smarty
  3.         require_once SMARTY_DIR . 'Smarty.class.php';
  4.         // Класс, расширяющий Smarty, используется для обработки
  5.         // и отображения файлов Smarty
  6.         class Application extends Smarty {
  7.                 // Конструктор класса
  8.                 public function __construct(){
  9.                         // Вызов конструктора Smarty
  10.                         parent::__construct();
  11.             // Подавляем ошибки вызванные Smarty
  12.             // $this->muteExpectedErrors();
  13.             //$this->error_reporting = E_ALL & ~E_NOTICE;
  14.                         // Меняем папки шаблонов по умолчанию
  15.                         $this->setTemplateDir(TEMPLATE_DIR);
  16.                         $this->setCompileDir(COMPILE_DIR);
  17.                         $this->setConfigDir(CONFIG_DIR);
  18.             $this->setPluginsDir('./libs/smarty/plugins/');
  19.             $this->addPluginsDir('./presentation/smarty_plugins/');
  20.                 }
  21.         }
  22. ?>


link.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.     class Link {
  3.         public static function Build($link) {
  4.             $base = 'http://' . getenv('SERVER_NAME');
  5.  
  6.             // Если константа HTTP_SERVER_PORT определена и значение отличается
  7.             // от используемого по умолчанию...
  8.             if (defined('HTTP_SERVER_PORT') && HTTP_SERVER_PORT != '80') {
  9.                 // Добавляем номер порта
  10.                 $base .= ':' . HTTP_SERVER_PORT;
  11.             }
  12.  
  13.         $link = $base . VIRTUAL_LOCATION . $link;
  14.  
  15.         // Escape-символы html
  16.         return htmlspecialchars($link, ENT_QUOTES);
  17.         }
  18.  
  19.         public static function ToDepartment($departmentId) {
  20.             $link = 'index.php?DepartmentId=' . $departmentId;
  21.  
  22.             return self::Build($link);
  23.         }
  24.  
  25.         public static function ToCategory($departmentId, $categoryId) {
  26.             $link = 'index.php?DepartmentId=' . $departmentId . '&CategoryId=' . $categoryId;
  27.  
  28.             return self::Build($link); self::Build($link);
  29.         }
  30.     }
  31. ?>
  32.  


function.load_presentation_object.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.     // Подключаем функцию из подключаемых файлов должны
  3.     // именоваться smarty_имя_типа
  4.     function smarty_function_load_presentation_object($params, $smarty) {
  5.         require_once PRESENTATION_DIR . $params['filename'] . '.php';
  6.  
  7.         $className = str_replace(' ', '',
  8.                                     ucfirst(str_replace('_', ' ',
  9.                                                         $params['filename'])));
  10.  
  11.         // Создаем объект представления
  12.         $obj = new $className();
  13.  
  14.         if(method_exists($obj, 'init')) {
  15.             $obj->init();
  16.         }
  17.  
  18.         // Присваиваем переменную шаблона
  19.         $smarty->assign($params['assign'], $obj);
  20.     }
  21. ?>


На месте ссылок появляется такое сообщение:
    ERRNO: 8
    TEXT: Undefined index: link_to_department
    LOCATION: C:\xampp\htdocs\estore\presentation\templates_c\9d0f0a98f3c9bf763e381562817f26af91324cdb.file.departments_list.tpl.php, line 67, at January 23, 2012, 3:17 pm
    Showing backtrace:
    call_user_func(Array[2], "8", "Undefined index: link_to_department", "C:\xampp\htdocs\estore\presentation\templates_c\9d0f0a98f3c9bf76...", "67", Array[1]) # line 1409, file: C:\xampp\htdocs\estore\libs\smarty\Smarty.class.php
    Smarty.mutingErrorHandler("8", "Undefined index: link_to_department", "C:\xampp\htdocs\estore\presentation\templates_c\9d0f0a98f3c9bf76...", "67", Array[1]) # line 67, file: C:\xampp\htdocs\estore\presentation\templates_c\9d0f0a98f3c9bf763e381562817f26af91324cdb.file.departments_list.tpl.php
    content_4f1d3c189eaee(Object: Smarty_Internal_Template) # line 180, file: C:\xampp\htdocs\estore\libs\smarty\sysplugins\smarty_internal_templatebase.php
    Smarty_Internal_TemplateBase.fetch(null, null, null, null, false, false, true) # line 285, file: C:\xampp\htdocs\estore\libs\smarty\sysplugins\smarty_internal_template.php
    Smarty_Internal_Template.getSubTemplate("departments_list.tpl", null, null, null, null, Array[0], "0") # line 57, file: C:\xampp\htdocs\estore\presentation\templates_c\9b13ad36ea5d3846230798cf561962a21e3e63dd.file.store_front.tpl.php
    content_4f1d3c1895350(Object: Smarty_Internal_Template) # line 180, file: C:\xampp\htdocs\estore\libs\smarty\sysplugins\smarty_internal_templatebase.php
    Smarty_Internal_TemplateBase.fetch("store_front.tpl", null, null, null, true) # line 374, file: C:\xampp\htdocs\estore\libs\smarty\sysplugins\smarty_internal_templatebase.php
    Smarty_Internal_TemplateBase.display("store_front.tpl") # line 26, file: C:\xampp\htdocs\estore\index.php


Версия PHP 5.3.8. Smarty 3.1.7

(Отредактировано автором: 23 Января, 2012 - 15:19:46)

 
 Top
DlTA
Отправлено: 23 Января, 2012 - 15:35:16
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




строкак 19 первого кода (я так подозреваю)
метод Catalog::GetDepartments(); не возвращает нужную структуру, или вообще ничего не возвращает, в общем надо смотреть что у него на выходе
 
 Top
Александр_Тяпкин
Отправлено: 23 Января, 2012 - 19:25:11
Post Id



Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Янв. 2012  


Помог: 0 раз(а)




И как проверить откуда уши растут?
(Добавление)
А, еще вылазит вот такая фигня:
    ERRNO: 2
    TEXT: filemtime() [function.filemtime]: stat failed for /home/tyapk794/public_html/mag/p resentation/templates_c/6f89e7f0 31e22f201033dd5663ccca06a088ec6d .file.store_front.tpl.php
    LOCATION: /home/tyapk794/public_html/mag/libs/smarty/sysplugins/smarty_resource.php, line 685, at January 23, 2012, 7:43 pm
    Showing backtrace:
    filemtime("/home/tyapk794/public_html/mag/presentation/templates_c/6f89e7f0...") # line 685, file: /home/tyapk794/public_html/mag/l ibs/smarty/sysplugins/smarty_res ource.php
    Smarty_Template_Source.getCompiled(Object: Smarty_Internal_Template) # line 646, file: /home/tyapk794/public_html/mag/l ibs/smarty/sysplugins/smarty_int ernal_template.php
    Smarty_Internal_Template.__get("compiled") # line 154, file: /home/tyapk794/public_html/mag/l ibs/smarty/sysplugins/smarty_int ernal_templatebase.php
    Smarty_Internal_TemplateBase.fetch("store_front.tpl", null, null, null, true) # line 374, file: /home/tyapk794/public_html/mag/l ibs/smarty/sysplugins/smarty_int ernal_templatebase.php
    Smarty_Internal_TemplateBase.display("store_front.tpl") # line 26, file: /home/tyapk794/public_html/mag/index.php


Это я почистил папку template_c (compile_dir Smarty), и убрал подавление ошибок в файле application.php
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB