Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Динамическое подключение страниц
 
 автор: TetRiska   (10.05.2009 в 15:16)   письмо автору
 
 

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

$page = isset($_GET['page'])?$_GET['page']:"main";
ob_start();
//вывожу категории с лева в блоке навигации
include("modules/categories/cat.php");
include("tpl/tpl_categories/category.html"); 
..........
switch($page) 

case "1":
include("tpl/top_content.html");
include("modules/categories/index.php");  
include("tpl/tpl_categories/musik.html");   
break;
case "2":
include("tpl/top_content.html");
include("modules/categories/index.php");  
include("tpl/tpl_categories/soft.html");   
break;
case "3":
include("tpl/top_content.html");
include("modules/categories/index.php");  
include("tpl/tpl_categories/films.html");   
break;
.........

.htaccess

RewriteRule ^1$ index.php?page=1
RewriteRule ^2$ index.php?page=2
RewriteRule ^3$ index.php?page=3

Код cat.php:

<?php 
$cat 
mysql_query("SELECT * FROM `".PREFIX."categories`")    or die ("Ошибка запроса №1 : " mysql_error());
if(
$cat)
{
    while(
$catrow mysql_fetch_assoc($cat))
    {
    
$categories .= "<li><a href='".$catrow['id']."'>".$catrow['title']."</a></li>";
    }
}
?>

modules/categories/index.php

<?
$page 
= isset($_GET['page'])?$_GET['page']:"1";

    
$podcat mysql_query("SELECT * FROM `".PREFIX."podcategories` WHERE categories='".(int)$page."'")    or die ("Ошибка запроса №1 : " mysql_error()); 
    while(
$podcatrow mysql_fetch_assoc($podcat))
    {
    
$musik .= "<a href='/1/".$podcatrow['id']."'>".$podcatrow['title']."</a>&nbsp;&nbsp;";
    } 

$page2 = isset($_GET['page'])?$_GET['page']:"2";

    
$podcat2 mysql_query("SELECT * FROM `".PREFIX."podcategories` WHERE categories='".(int)$page2."'")    or die ("Ошибка запроса №1 : " mysql_error()); 
    while(
$podcatrow2 mysql_fetch_assoc($podcat2))
    {
    
$soft .= "<a href='/2/".$podcatrow2['id']."'>".$podcatrow2['title']."</a>&nbsp;&nbsp;";
    } 
    
$page3 = isset($_GET['page'])?$_GET['page']:"3";

    
$podcat3 mysql_query("SELECT * FROM `".PREFIX."podcategories` WHERE categories='".(int)$page3."'")    or die ("Ошибка запроса №1 : " mysql_error()); 
    while(
$podcatrow3 mysql_fetch_assoc($podcat3))
    {
    
$films .= "<a href='/3/".$podcatrow3['id']."'>".$podcatrow3['title']."</a>&nbsp;&nbsp;";
    } 
?>

Потом переменные $musik, $soft, $films вывожу в шаблон.
Получается статически вывожу категории, если добавить/удалить категорию или подкатегорию, то уже придется править код, что не рационально и не правильно :( Помогите разобраться как правильно это делается.

  Ответить  
 
 автор: Balamut182   (10.05.2009 в 15:24)   письмо автору
 
   для: TetRiska   (10.05.2009 в 15:16)
 

а что вам мешает хранить в таблице вместе с данными категории и название шаблона?

$tpl_q = mysql_query("SELECT `template` FROM `".PREFIX."podcategories` WHERE categories='".(int)$page.' LIMIT 1");
$template = mysql_fetch_row($tpl_q))
include("tpl/top_content.html");
include("modules/categories/index.php");  
include("tpl/tpl_categories/".$template[0].".html");   

  Ответить  
 
 автор: TetRiska   (10.05.2009 в 15:26)   письмо автору
 
   для: Balamut182   (10.05.2009 в 15:24)
 

шаблоны сменил и что потом таблицу менять?

  Ответить  
 
 автор: Balamut182   (10.05.2009 в 15:33)   письмо автору
 
   для: TetRiska   (10.05.2009 в 15:26)
 

так шаблоны меняйте сколько угодно, главное чтобы название шаблона оставалось старым и уникальным, его и храните в таблице

  Ответить  
 
 автор: TetRiska   (10.05.2009 в 15:51)   письмо автору
 
   для: Balamut182   (10.05.2009 в 15:33)
 

Я понял :) Видимо неправильно сформулировал тему. Проблема в том, если посмотреть на код, то видно, что если добавить допустим подкатегорию, выведется, но работать не будет, т.к. нужно дописывать в коде еще 1 кейз, и соответственно в модули/индекс дописывать вывод подкатегорий...менять хтаксесс...это геморой, как сделать динамику? чтобы через админку лишь добавил категорию, потом к ней подкатегории и все, никаких изменений в коде?

  Ответить  
 
 автор: Balamut182   (10.05.2009 в 15:56)   письмо автору
 
   для: TetRiska   (10.05.2009 в 15:51)
 

шаблон один и тот же для разных категорий - зачем все эти кейсы и шаблоны тогда я не понимаю.
зачем вам $page - тоже тогда не понятно, разве нельзя вместо $page использовать id категории, - тогда редирект будет один, и шаблон один и запрос один без всяких кейзов

  Ответить  
 
 автор: Balamut182   (10.05.2009 в 16:04)   письмо автору
 
   для: Balamut182   (10.05.2009 в 15:56)
 

я бы сделал так

$cat_id = intval($_GET['cat_id']);
ob_start();
//вывожу категории с лева в блоке навигации
$tpl = 'main';
$cat = mysql_query("SELECT * FROM `".PREFIX."categories`")    or die ("Ошибка запроса №1 : " . mysql_error());
if($cat)
{
    while($catrow = mysql_fetch_assoc($cat))
    {
    $categories .= "<li><a href='".$catrow['id']."'>".$catrow['title']."</a></li>";
    //Текущий каталог
    if($catrow['id'] == $cat_id) $tpl = $catrow['template_name'];
    }


include("tpl/tpl_categories/category.html"); 
nclude("tpl/top_content.html");

if($tpl != 'main')
{
    $podcat = mysql_query("SELECT * FROM `".PREFIX."podcategories` WHERE categories='".$cat_id."'")    or die ("Ошибка запроса №1 : " . mysql_error()); 
    while($podcatrow = mysql_fetch_assoc($podcat))
    {
    $musik .= "<a href='/1/".$podcatrow['id']."'>".$podcatrow['title']."</a>&nbsp;&nbsp;";
    }  
}
include("tpl/tpl_categories/".$tpl.".html");    



RewriteRule ^catalog_([0-9]*)$ index.php?cat_id=$1

  Ответить  
 
 автор: TetRiska   (10.05.2009 в 16:19)   письмо автору
 
   для: Balamut182   (10.05.2009 в 16:04)
 

Принцип работы у меня таков:
1. человек нажал на ссылку ему вместо блока новостей загрузились подкатегории: адресная строка выглядит так - домен/1............домен/ид категории
2. человек выбрал подкатегорию, ему ниже должно загрузиться весь список данных с этой подкатегории: адресная строка выглядит так - домен/1/1.........домен/ид категории/ид подкатегории

Я бы не хотел связывать шаблоны с таблицами, все отдельно, пхп код, хтмл код...подключатся лишь с помощью перебора через кейз с определением текущей страницы, у меня ж получается статика, т.к. если что то добавлять нужно менять код, можно сделать динамически, вот только я не пойму пока как, учусь :(

  Ответить  
 
 автор: Balamut182   (10.05.2009 в 16:28)   письмо автору
 
   для: TetRiska   (10.05.2009 в 16:19)
 

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

  Ответить  
 
 автор: TetRiska   (10.05.2009 в 16:40)   письмо автору
 
   для: Balamut182   (10.05.2009 в 16:28)
 

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

case "1":
include("tpl/top_content.html");
include("modules/categories/index.php");  
include("tpl/tpl_categories/musik.html");   //выводиться переменная в которую в индекс.пхп были записаны подкатегории
break;

  Ответить  
 
 автор: Balamut182   (10.05.2009 в 17:01)   письмо автору
 
   для: TetRiska   (10.05.2009 в 16:40)
 

1) замечу, что если у вас определена переменная $page, т.е. если, например, $_GET['page'] = 1, то в index.php у вас 3 раза выполнится один и тот же запрос.
2) ветки кейсов у вас различаются только названиями шаблонов для отдельной категории, и название шаблона, к примеру music.html, у вас никак не связано с номером каталога 1.
3) приведенный мной выше код решает проблему статичности, но вам он не подходит, других вариантов лично я не вижу

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования