Вывод разных TPL, в зависимости от выбора шаблона в меню

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО

При смене шаблона в меню выводим разные tpl

#1 21 января 2012 в 13:35
Необходимо сделать следующее, если в меню например фотогалерея стоит шаблон по умолчанию, выводим com_photos_view.tpl, если меняем в меню шаблон например, на forum выводим com_photos_view12.tpl

Частично разобрался поменял в файле frontend.php из фотогалерее вот код

  1.  
  2. // здесь делаем запрос в базу
  3. $resultat = mysql_query("SELECT template FROM cms_menu WHERE linkid = '$forum' LIMIT 1");
  4.  
  5. $array = mysql_fetch_array($resultat);
  6.  
  7. //Осталось разобраться здесь
  8. $array['template'] = 'com_photos_view.tpl';
  9.  
  10. //какой шаблон выводить
  11. $smarty = $inCore->initSmarty('components', $array['template']);
  12.  
  13.  
Помогите изменить этот кусок кода,
  1. $array['template'] = 'com_photos_view.tpl';
не могу понять как правильно прописать правило, т.е. если в базе стоит 0 тогда выводим com_photos_view.tpl, если стоит forum выводим com_photos_view12.tpl
#2 21 января 2012 в 15:48
lucku, может я неправильно понял, что нужно сделать, но можно же проще сделать.
В папке templates создаете новую папку(новый шаблон). Назовите, например, new. Далее при выборе шаблона для пункта меню этот шаблон появится в списке. В этой папке создаете папку components и кидаете туда файл com_photos_view12.tpl. А файл com_photos_view.tpl оставляете в папке components шаблона по умолчанию. И всё. Если для для вашего пункта меню(я полагаю это для фотогалереи) выбран шаблон по умолчанию, будет выводиться com_photos_view.tpl, если измените на new будет выводиться com_photos_view12.tpl. В базе для выбранного пункта меню в поле template будет запись new. Это просто название папки шаблона, чтобы было понятно, где искать файлы шаблона.
Не понял правда зачем нужен форум. Если я говорю не то, объясните подробнее, что нужно сделать.
#3 21 января 2012 в 16:02
Марат, Да было бы так не плохо, но при смене шаблона, надо чистить папку cache иначе выводятся старые значения. т.е. пользователь видит старое значение com_photos_view.tpl. Уже этот вариант про бывал.
forum это было для примера.
#4 21 января 2012 в 16:17
А-а-а, это из-за кэша так приходится...
Сделайте условие:
  1.  
  2. $template = '';
  3. if($array['template'] == 0){
  4. $template = 'com_photos_view.tpl';
  5. }else{
  6. $template = 'com_photos_view12.tpl';
  7. }
  8. $smarty = $inCore->initSmarty('components', $template);
  9.  
Как то так.
#5 21 января 2012 в 16:45
Спасибо так уже тоже про бывал. Все равно не срабатывает. Выводит тот который записан первый.

Вод весь код

  1.  
  2. $resultat = mysql_query("SELECT template FROM cms_menu WHERE linkid = '$forum' LIMIT 1");
  3. $array = mysql_fetch_array($resultat);
  4. $template = '';
  5. if($array['template'] == 0){
  6. $template = 'com_photos_view.tpl';
  7. }else{
  8. $template = 'com_photos_view12.tpl';
  9. }
  10. $smarty = $inCore->initSmarty('components', $template);
  11.  
Ну и в $smarty->display($template); поменял естественно.
В чем проблема не пойму
#6 21 января 2012 в 17:26
А что у вас в переменной $forum? В запросе
  1. WHERE linkid = '$forum'
Если код вставляете в frontend.php фотогалереи, то нужно же
  1. WHERE linkid = 'photos'
Чтобы ощутить изменения.
Попробуйте вывести
  1. print_r($array);
Делается ли нужная выборка?
#7 21 января 2012 в 17:48
Да там стоит photos, это код немного изменял для другого.
Вывел print_r($array); вот результат при
выборе шаблона по умолчанию
Array ( [0] => 0 [template] => 0 )
при выборе шаблона grand_eng
Array ( [0] => grand_eng [template] => grand_eng )
#8 21 января 2012 в 18:56
В самом деле не срабатывает условие ). Пришлось покопаться. Вот так работает:
  1. if(empty($array['template']))
#9 21 января 2012 в 20:18
Да действительно, теперь работает, как надо. Большое спасибо
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.