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]   

> Без описания
Hapson
Отправлено: 15 Ноября, 2013 - 12:29:49
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


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

[+]


Всем привет!
Такое дело... нужен совет наверное не в смысле кода, а всмысле идей.
Пишу блог, попутно практикуя. Все хорошо и прекрасно, вроде как. Соорудил роутер, все работает. Однако вчера вдруг понял, что у меня совершенно нет идей о том, как динамически, то есть выборочро наполнять сайдбар.
Роутер работает так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $CONTENT = mainRouter();
  3. // если роутер ничего не нашел в строке запроса, то он кинет на 404
  4. // если нашел, то он дернет нужную функцию, она получит все данные и роутер вернет путь к файлу, который нужно подключить
  5. //далее подключается шаблон
  6. include_once ROOT .'/template/tmpl.php';
  7.  
  8. //а в шаблоне, где выводится контент пишу
  9. include_once $CONTENT;
  10.  

Все отлично работает - нужный контент выводится в зависимости от запроса.
Но что делать с сайдбаром ума не приложу. По идее, контент сайдбара тоже зависит от строки запроса. Например при выборе одной категории, в сайдбар выводится меню этой категории. При выборе другой категории, в сайдбаре нужно вывести меню этой категории. Если скажем перешел на главную страницу, то там можно вывести меню с последними статьями.
Делать статичную боковую колонку не хочется. Но не писать же второй роутер для сайдбара.


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
teddy
Отправлено: 15 Ноября, 2013 - 12:45:02
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


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




Hapson пишет:
По идее, контент сайдбара тоже зависит от строки запроса. Например при выборе одной категории, в сайдбар выводится меню этой категории.

Можно создать таблицу в БД, где будут храниться менюшки + поле category

Ну а потом по параметру смотрим, SELECT column FROM `menu` WHERE `category`='$params[0]'

как то так
 
 Top
Hapson
Отправлено: 15 Ноября, 2013 - 12:56:16
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


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

[+]


teddy пишет:
Hapson пишет:
По идее, контент сайдбара тоже зависит от строки запроса. Например при выборе одной категории, в сайдбар выводится меню этой категории.

Можно создать таблицу в БД, где будут храниться менюшки + поле category

Ну а потом по параметру смотрим, SELECT column FROM `menu` WHERE `category`='$params[0]'

как то так

Ну да, наверно как-то так. Короче все же придется делать роутер для сайдбара, так как все зависит от строки запроса.
Хочется гибкости, но и усложнять не хочется.
Наверное можно сделать так, чтобы основной роутер дергал контроллер сайдбара и передавал ему имя модуля, который сейчас формирует контент.
Спасибо за наводку!


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
etoYA
Отправлено: 15 Ноября, 2013 - 23:50:00
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


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




Hapson, как вариант

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. abstract class Controller{
  4.         public $sideBar;
  5.         public $content;
  6. }
  7. ?>
  8.  

PHP:
скопировать код в буфер обмена
  1. class TestController extends Controller
  2. {
  3.         public function actionTest()
  4.         {
  5.                 $this->content = 'some test content';
  6.                 $this->sideBar = 'some content for test sidebar';
  7.         }
  8.         public function actionTest2()
  9.         {
  10.                 $this->content = 'some test2 content';
  11.                 $this->sideBar = 'some content for test2 sidebar';
  12.         }
  13. }


и в шаблоне уже указать что-то типа этого:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <div id="content"><?php echo $this->content;?></div>
  3. <div id="sideBar"><?php echo $this->sideBar;?></div>
  4.  
 
 Top
DelphinPRO
Отправлено: 16 Ноября, 2013 - 11:15:50
Post Id



Активный участник


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


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




у меня модули (модуль в моей терминологии - небольшой блок на странице сайта) состоят из модели и представления. Вывод на страницу по принципу позиций, как в джумле. Т.е. В шаблоне страницы обозначены позиции, а уже в них выводятся модули. Далее просто - контроллер страницы сам добавляет нужные на этой странице модули, примерно так

PHP:
скопировать код в буфер обмена
  1. $this->addModule('LoginModule', 'right');
  2. $this->addModule('MyModule', 'right');


Во время добавления срабатывает модель модуля, собирает и обрабатывает данные.
Представление вызывается н этапе рендеринга всего шаблона страницы, уже после отработки всей бизнес-логики.

Получается немного избыточно, в каждом действии контроллера приходится прописывать необходимые модули, но зато просто. Однако я все еще ище более оптимальную схему вывод модулей.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Hapson
Отправлено: 17 Ноября, 2013 - 22:59:11
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


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

[+]


etoYA
Не, я пока без классов обхожусь.
DelphinPRO
Ну да, как-то так. Вчера написал некое подобие контроллера модулей. В шаблоне оказалось это
PHP:
скопировать код в буфер обмена
  1.  
  2. <div id="sidebarBlock">
  3.         <?PHP
  4.         foreach($SIDEBAR as $func){$func();}
  5.         ?>
  6. </div>
  7.  

Сделал таблицу:
mod_name | activation | position | param
В папке каждого модуля есть файл run.php, в файле есть функция runModName()
Контроллер смотрит в таблицу и выбирает имена модулей, у которых activation = 1. Далее контроллер проверяет наличие функции runModName() (runUsers, runLastArt, runMenu...) и дергает в цикле все эти функции. Стартовые функции модулей отрабатывают и возвращают имена функций для вывода их данных. Контроллер собирает имена функций для вывода и складывает их в массив $SIDEBAR.
В шаблоне эти функции дергаются в цикле и выводят че у них есть. То есть контроллер передает так сказать представления с готовыми данными в шаблон, где все это остается только нарисовать.
Короче работает, но допиливаю еще, как-то пока не очень нравится.
(Добавление)
С позициями пока тоже не определился. Пока все отрисовывается в колонке сайдбара в соответствии с позициями из поля position.


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 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