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
Форумы портала PHP.SU :: Версия для печати :: Не генерируются ссылки
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Не генерируются ссылки

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

1. Александр_Тяпкин - 23 Января, 2012 - 15:18:36 - перейти к сообщению
Всем привет!
У меня возникла проблема. На сайте есть разделы, но ссылки не генерируются. Должны быть вида 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. ?>


На месте ссылок появляется такое сообщение:


Версия PHP 5.3.8. Smarty 3.1.7
2. DlTA - 23 Января, 2012 - 15:35:16 - перейти к сообщению
строкак 19 первого кода (я так подозреваю)
метод Catalog::GetDepartments(); не возвращает нужную структуру, или вообще ничего не возвращает, в общем надо смотреть что у него на выходе
3. Александр_Тяпкин - 23 Января, 2012 - 19:25:11 - перейти к сообщению
И как проверить откуда уши растут?
(Добавление)
А, еще вылазит вот такая фигня:


Это я почистил папку template_c (compile_dir Smarty), и убрал подавление ошибок в файле application.php

 

Powered by ExBB FM 1.0 RC1