Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать вложеную страницу? www.site.ru/stranica/podstranica/ 
:(
    Опции темы
americanets
Дата 16.11.2006, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 2
Всего: 12




Как сделать вложеную страницу? Те например www.site.ru/stranica/ я выбираю так

$sql = "SELECT * FROM `pages` WHERE `name_url`='stranica';";

а как сделать чтоб было www.site.ru/stranica/podstranica/

и можно было вывести в меню
страница
 - подстраница1
 - подстраница2
 - подстраница3
 
 и т д возможно до бесконечности вложений smile 
 
 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
Wolf1994
Дата 16.11.2006, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 2
Всего: 29



Код

"$sql="SELECT * FROM pages WHERE name_url LIKE ".substr ($page, 0, strrpos ($page, "/"))."%";

PM MAIL WWW   Вверх
americanets
Дата 16.11.2006, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 2
Всего: 12



а можно по подробнее насчет получения тех самых данных из урла и тд smile 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
SelenIT
Дата 16.11.2006, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 9
Всего: 401



americanets, а как у Вас эти страницы хранятся в базе? В виде популярного "id, parent_id, name_url" или как-то по-другому?


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Wolf1994
Дата 16.11.2006, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 2
Всего: 29



Цитата(americanets @  16.11.2006,  21:26 Найти цитируемый пост)
а можно по подробнее насчет получения тех самых данных из урла и тд


Не совсем понял вопрос...

Я предположил что данные хранятся в виде:

Код

page
page/subpage1
page/subpage2
page/subpage2/subsubpage1
page/subpage2/subsubpage2
page/subpage3


Тогда, например, при запросе страницы: "page/subpage2/subsubpage1", будет браться "page/subpage2":

Код

substr ($page, 0, strrpos ($page, "/"))


После чего запрос выберет:

Код

page/subpage2
page/subpage2/subsubpage1
page/subpage2/subsubpage2

PM MAIL WWW   Вверх
americanets
Дата 17.11.2006, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 2
Всего: 12



Цитата(SelenIT @  16.11.2006,  21:31 Найти цитируемый пост)
а как у Вас эти страницы хранятся в базе? В виде популярного "id, parent_id, name_url" или как-то по-другому? 


Да есть id но parent_id нет, можно по подробнее о его использовании и что то не понял про 

Код

при запросе страницы: "page/subpage2/subsubpage1", будет браться "page/subpage2":


и как вывести в меню 

страница
 - подстраница1
 - подстраница2
 - подстраница3

вот в чем вопрос ? 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
skifoz
Дата 17.11.2006, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 23.1.2006
Где: Россия

Репутация: нет
Всего: 1



parent_id подразумевает ID отца, то есть к какому разделу отноститься данная страница,
например у нас есть главный каталог


name | id | parent_id

main  | 1 | 0

чтобы прикрутить к этому каталогу скажем подкаталог с название podmain1, вносим в таблицу
вот такие данные

podmain1 | 2 | 1

то есть пишем в parent_id, ID каталога к которому принадлежит данный каталог.
PM MAIL WWW   Вверх
americanets
Дата 17.11.2006, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 2
Всего: 12



ага, тут понятно, а вот как получить нужные данные из урла? с одним просто pg=stranica а вот как stranica/podstranica/ и тд вопрос для меня большой
а как потом вывести все это в меню, чтоб не сортировалось по id или дате ? чтоб 

страница
 
    подстраница
    подстраница
     
      подстраница
      подстраница
      подстраница
    подстраница
?


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
wetlook
Дата 17.11.2006, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 16.11.2006

Репутация: нет
Всего: нет



бeрем URI через $uri=$_SERVER['REQUEST_URI'];
Извлекаем в переменные как писал Wolf1994 через substr();
Должно получиться


Это сообщение отредактировал(а) wetlook - 17.11.2006, 13:46
PM MAIL   Вверх
americanets
Дата 17.11.2006, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 2
Всего: 12



буду прбовать, если что обращусь тк что-то мало понимаю пока 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
americanets
Дата 18.11.2006, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 2
Всего: 12



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


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
Wolf1994
Дата 18.11.2006, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 2
Всего: 29



Можно сделать всё намного проще и вообще обойтись без БД.

Пример:

Код

$menu_ar=array (
"software",
"Программы",
"Интернет, Разработка, Науки, Мультимедиа, Утилиты, КПК...",

 "software/security",
 "Безопасность",
 "Защита компьютера",

  "software/security/encryptors",
  "Шифровальщики",
  "Кодирование информации",

  "software/security/antivirus",
  "Антивирусы",
  "Антивирусные сканеры"
);

$menu=array_chunk ($menu_ar, 3);

$current_dir="software/security";//текущий директорий

$length=strlen ($current_dir);

$current_menu=array_filter ( $menu, create_function ( '$t', 'return ( substr ($t [0], 0, '.$length.')=="'.$current_dir.'" );' ) );

print_r ($current_menu);//Этот массив будет содкржать нужное Вам меню


При этом Вы приобретёте лёгкость манипулирования и смены и информации в меню - не надо будет писать скрипт - редактор под БД.
PM MAIL WWW   Вверх
americanets
Дата 18.11.2006, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 2
Всего: 12



Цитата(Wolf1994 @  18.11.2006,  18:15 Найти цитируемый пост)
Можно сделать всё намного проще и вообще обойтись без БД.

можно и так но в конкретном случае нужна именно база и чтоб она обнавлялась и дополнялась чтоб не ручками там потом все писать а можно было структурировать и собрать скрипт 
 smile 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
americanets
Дата 19.11.2006, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 2
Всего: 12



может кто-нибудь поможет примером, а то никак не могу разобраться, 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
americanets
Дата 19.11.2006, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 2
Всего: 12



Нашел вот такой код для парсинга URL (http://www.compdoc.ru/internet/php/user_friendly_urls/) , как мне думуется нужно в .htaccess написать RewriteRule ^(.*) content.php
и URL будет браться , а вот как на основании его выводить нужную страницу(вложенные страницы) и какова должна быть структура MySql? 

Код

<?php
header("http/1.1 200 Ok");
if(empty($_SERVER['REDIRECT_URL'])) $P=array();
else
{ $url=$_SERVER['REDIRECT_URL'];
if($url[0]=='/') $url=substr($url, 1);
if($url[strlen($url)-1]=='/') $url=substr($url, 0, -1);
$url=explode('/', $url);
$tmp=count($url)-1;
if($tmp>0)
{
$P=array(); $j=0;
for($i=0; $i<=$tmp; $i++)
{
if(!empty($url[$i]))
{
$P[$j]=$url[$i];
$j++;
}
}
}
else $P=array();
}
?> 



--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
Wolf1994
Дата 19.11.2006, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 2
Всего: 29



Зачем так усложнять? Почему нужна именно база данных? Меню априори имеет небольшой размер и для него вполне подойдёт текстовый файл (лёгкая модификация приведённого мной варианта).

Если обязательно нужно через БД, то стандартная структура:
Код

id=идентификатор
name=название пункта
title=тайтл
url=адрес
parent_id=принадлежность к категории


Код

1, "Пункт", "Тайтл", "page", 0
2, "Пункт2", "Тайтл", "page", 0
     3, "Пункт2", "Тайтл", "page", 2
     4, "Пункт2", "Тайтл", "page", 2
          5, "Пункт2", "Тайтл", "page", 4


Либо:

Код

1, "Name", "page1"
     2, "Name", "page1/subpage1"
     3, "Name", "page1/subpage2"
          4, "Name", "page1/subpage2/subpage1"


При этом выбирать по "page1", "page1/subpage1", etc...

Это сообщение отредактировал(а) Wolf1994 - 19.11.2006, 22:30
PM MAIL WWW   Вверх
americanets
Дата 20.11.2006, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 2
Всего: 12



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

Добавлено @ 14:14 
а насчет усложнять не знаю, нужно и траницы создавать и выбирать их потом из базы в зависимости от урла буду пробовать


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
americanets
Дата 20.11.2006, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 2
Всего: 12



вобщем сделал так: 
в htaccess
Код

RewriteEngine on
RewriteRule ^(.*) content.php


в content

Код

$full_url = preg_replace("/\?.*$/", "", $_SERVER["REQUEST_URI"]);
$full_url = preg_replace("/\/$/","",$full_url);
$full_url = preg_replace("/^\//","",$full_url);
$urls = preg_split("/\//",$full_url);
$parent = count($urls)-1;
for ($n=0; $n<=count($urls)-1; $n++) {
    $sql = "SELECT * FROM `pages` WHERE `parent`=$parent AND `name_url`='$urls[$n]';";
    $result=mysql_query($sql);
    $dat=mysql_fetch_array($result);
    print $dat[content];
    }


в MySql 

Код

CREATE TABLE `pages` (`id` int(11) NOT NULL auto_increment, `name_url` varchar(255) NOT NULL default '', `content` text,`parent` int(11) NOT NULL default '0',  PRIMARY KEY  (`id`));
INSERT INTO `pages` VALUES (1, 'home','просто страница', 0);
INSERT INTO `pages` VALUES (2, 'pod','просто подстраница', 1);
INSERT INTO `pages` VALUES (3, 'podstr3','просто подстраница3', 2);


вобщем  работает , но как быть если это просто www.site.ru те параметров нет и что делать если вводят не существующую страницу, как избежать ошибки

2. как автоматизировать добавление страниц в базу те в меню выбирать родитель страницы, чтоб он присваивал parent 

Это сообщение отредактировал(а) americanets - 20.11.2006, 19:24


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
Wolf1994
Дата 20.11.2006, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 2
Всего: 29



Вместо

Код

print $sql[content];


Сделать:
Код

$result=mysql_query ($sql);
while ($row=mysql_fetch_assoc ($result))
{
 print_r ($row);
 print "<br /><br />";
}

PM MAIL WWW   Вверх
americanets
Дата 20.11.2006, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 2
Всего: 12



ага , пока правил пост вы уже ответили, там еще проблемка возникла, плз help


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
americanets
Дата 20.11.2006, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 2
Всего: 12



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

    http://site.ru/satranica/podstresho/
    http://site.ru/satranica/podstresho/podstresho/
    
Код

INSERT INTO `pages` VALUES (5, 'satranica', 'просто подстраница 2', 0);
INSERT INTO `pages` VALUES (6, 'podstresho', 'просто подстраница 2osds', 5);
INSERT INTO `pages` VALUES (7, 'podstresho', 'просто подстраница isho i ischo', 6);



--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
Wolf1994
Дата 20.11.2006, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 2
Всего: 29



Приведите полный код скрипта, результат его работы и желаемый результат.
PM MAIL WWW   Вверх
americanets
Дата 20.11.2006, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 2
Всего: 12



Код

<?
require("config.php");
mysql_connect($CFG->db_host, $CFG->db_user, $CFG->db_pass);
mysql_select_db($CFG->db_name);

$full_url = preg_replace("/\?.*$/", "", $_SERVER["REQUEST_URI"]);
$full_url = preg_replace("/\/$/","",$full_url);
$full_url = preg_replace("/^\//","",$full_url);
$urls = preg_split("/\//",$full_url);

$parent = count($urls)-1;
for ($n=0; $n<=count($urls)-1; $n++) {
    $sql = "SELECT * FROM `pages` WHERE `parent`=$parent AND `name_url`='$urls[$n]';";
    $result=mysql_query($sql);
    $dat=mysql_fetch_array($result);
    print $dat[content];
    }
    
?>

выводится страницы из вложений к странице которая выше, те я считая count count($urls) вроде как не учел что у нижних страниц parent_id будет больше количества вложений



а при наборе неверного адреса или просто www.site.ru ничего нет, а желательно чтоб была первая страница и 404-я соответственно

Добавлено @ 21:54 
желательный результат чтоб можно было выводить 

www.site.ru/stranica/podstranica/

www.site.ru/stranica2/podstranica/

.....

Заранее благодарен

Добавлено @ 21:55 
в config.php

Код

class object {};

$CFG = new object;

$CFG->db_host = "localhost";
$CFG->db_name = "proba";
$CFG->db_user = "proba";
$CFG->db_pass = "proba";



--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
SelenIT
Дата 21.11.2006, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 9
Всего: 401



americanets, вот это уже та структура, про которую я вначале подумал.

В такой структуре однозначно найти страницу по пути можно так:
Код

/* пусть путь = "satranica/podstresho/podstresho" */
SELECT t1.* FROM `pages` as t1
INNER JOIN `pages` as t2 ON t2.`id` = t1.`parent`
INNER JOIN `pages` as t3 ON t3.`id` = t2.`parent`
WHERE t3.`name_url` = 'satranica' AND t2.`name_url` = 'podstresho' AND t1.`name_url` = 'podstresho'


Соответственно, PHP-скрипт для генерации такого запроса будет примерно таким:
Код

$path = substr($_SERVER['REQUEST_URI'], 1, strrpos($_SERVER['REQUEST_URI'], '/')-1); // обрезаем URL по начальному и последнему слешам
$path_parts = explode('/', $path);
$sql = "SELECT t1.* FROM `pages` as t1";
for ($i=0, $c=count($path_parts); $i<$c; $i++) {
   if ($i>0) $sql .= " INNER JOIN `pages` as t".($i+1)." ON t".($i+1).".`id` = t".$i.".`parent`"; // добавляемем условия джойнов
   $where[] = "t".($c-$i).".`name_url` = '".$path_parts[$i]."'"; // собираем части WHERE
}
$sql .= ' WHERE '.implode(' AND ', $where); // собираем запрос воедино
//echo $sql; // должно получится как выше, только в одну строку


Это сообщение отредактировал(а) SelenIT - 21.11.2006, 01:44


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
americanets
Дата 21.11.2006, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 2
Всего: 12



что-то не могу понять про t1 t2.. те структуру SQL

Добавлено @ 10:08 
и как там привязаны страницы, и как потом их добовлять, а можно ли попробовать поправить мой код, он ведь от части рабочийsmile 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
SelenIT
Дата 21.11.2006, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 9
Всего: 401



americanets, t1, t2 и т.д. - это псевдонимы Вашей таблицы `pages`. Она связывается сама с собой столько раз, сколько уровней вложенности в адресе искомой страницы (на самом деле там есть ограничение - 31 раз в старых версиях и как минимум 60 - в 5-й, но для сайта этого, по-моему, должно быть достаточно). Причем связывание идет таким образом, что имена страниц могут повторяться как угодно - все равно выбираться будут только те, предками которых являются страницы с именами "старших" поразделов в соотвествующем адресу порядке. Причем делается это одним (хоть и сложноватым с виду) запросом, поэтому тормозить не должно (главное - нет запросов в цикле).


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
americanets
Дата 21.11.2006, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 2
Всего: 12



стало яснее , но можно как то собрать фсе это воедино, с дампом базы и PHP кодом, и как потом добавлять страницу, туповат что-то я пока в этом деле smile 
ПЛЗ ХЕЛП


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
SelenIT
Дата 21.11.2006, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 9
Всего: 401



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


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
americanets
Дата 21.11.2006, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 2
Всего: 12



те вот это 

Код

SELECT t1.* FROM `pages` as t1
INNER JOIN `pages` as t2 ON t2.`id` = t1.`parent`
INNER JOIN `pages` as t3 ON t3.`id` = t2.`parent`
WHERE t3.`name_url` = 'satranica' AND t2.`name_url` = 'podstresho' AND t1.`name_url` = 'podstresho
'

я не использую а сразу 
использую код и вывожу из базы

Код

$path = substr($_SERVER['REQUEST_URI'], 1, strrpos($_SERVER['REQUEST_URI'], '/')-1); // обрезаем URL по начальному и последнему слешам
$path_parts = explode('/', $path);
$sql = "SELECT t1.* FROM `pages` as t1";
for ($i=0, $c=count($path_parts); $i<$c; $i++) {
   if ($i>0) $sql .= " INNER JOIN `pages` as t".($i+1)." ON t".($i+1).".`id` = t".$i.".`parent`"; // добавляемем условия джойнов
   $where[] = "t".($c-$i).".`name_url` = '".$path_parts[$i]."'"; // собираем части WHERE
}
$sql .= ' WHERE '.implode(' AND ', $where); // собираем запрос воедино
//echo $sql; // должно получится как выше, только в одну строку

? 
совсем запутался smile 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
SelenIT
Дата 21.11.2006, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 9
Всего: 401



Этим PHP-кодом Вы собираете SQL-запрос (подобный вышеприведенному), который вернет Вам страницу по данному URI. Сам запрос был приведен только для иллюстрации, строить Вы его будете динамически в зависимости от конкретных параметров URL.

Это сообщение отредактировал(а) SelenIT - 21.11.2006, 15:30


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
americanets
Дата 21.11.2006, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 2
Всего: 12



спасибо, буду пробовать


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
americanets
Дата 21.11.2006, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 2
Всего: 12



все разобрался, спасибо, только вот есть небольшая проблемка, 
1. Что делать если пользователь зашел на сайт www.site.ru как сделать чтоб выводилась первая страница? 
2. www.site.ru/stranica/ работает, а www.site.ru/stranica нет, те обязательно нужен завершающий слеш, можно ли этого избежать

Это сообщение отредактировал(а) americanets - 21.11.2006, 18:23


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
Wolf1994
Дата 22.11.2006, 03:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 2
Всего: 29



Цитата(americanets @  21.11.2006,  18:23 Найти цитируемый пост)
2. www.site.ru/stranica/ работает, а www.site.ru/stranica нет, те обязательно нужен завершающий слеш, можно ли этого избежать


Код

if (substr ($page, -1)!="/")
 $page.="/";


Это сообщение отредактировал(а) Wolf1994 - 22.11.2006, 03:44
PM MAIL WWW   Вверх
americanets
Дата 22.11.2006, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 2
Всего: 12



а как быть с www.site.ru


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
SelenIT
Дата 23.11.2006, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 9
Всего: 401



americanets, тут возможны варианты: либо для корневой страницы вообще не хранить путь в базе, а выводить ее по условию в самом скрипте (имхо, оправданный вариант, если это - сплэш-страница с другим шаблоном дизайна и т.п.), или хранить ее в базе как раздел первого уровня с name_url = ''. К тому же, алгоритм разбора REQUEST_URI почи наверняка придется усовершенствовать (дописывать слеш лишь к адресам определенного вида, обрезать "хвост" по точке или знаку вопроса и т.д.), в нем можно предусмотреть особый случай для URI == '/'. Я ведь показал лишь упрощенный схематичный пример, а окончательное решение зависит от условий конкретной задачи...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
americanets
Дата 23.11.2006, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 2
Всего: 12



со слешами разобрался, осталось только с www.site.ru , еще есть вопросы по поиску, те поиск я делаю

Код

$query="SELECT * from pages where content LIKE '%$poisk%'";
$query = mysql_query($query) or die (mysql_error());



WHILE ($dat=mysql_fetch_array($query))
     {
    print "<li>".$dat[content]."URL".$dat[name_url];}

но не знаю как вывести правильный URL те stranica/podstranica/...

и как выводить заголовок Главная-> Подстраница ...
Наверное нужно будет развернуть новую тему

Это сообщение отредактировал(а) americanets - 23.11.2006, 22:36


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
americanets
Дата 24.11.2006, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 2
Всего: 12



и все таки не решил проблему с www.site.ru HELP smile 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
americanets
Дата 25.11.2006, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 2
Всего: 12



с www.site.ru все оказалось проще чем думал smile а вот про поиск не совсем понял, поднял новую тему но что-то никто не посоветовал пока ничего smile 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
americanets
Дата 21.6.2007, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: 2
Всего: 12



Цитата(SelenIT @  21.11.2006,  00:23 Найти цитируемый пост)
Соответственно, PHP-скрипт для генерации такого запроса будет примерно таким:

код PHP


Код

$path = substr($_SERVER['REQUEST_URI'], 1, strrpos($_SERVER['REQUEST_URI'], '/')-1); // обрезаем URL по начальному и последнему слешам
$path_parts = explode('/', $path);
$sql = "SELECT t1.* FROM `pages` as t1";
for ($i=0, $c=count($path_parts); $i<$c; $i++) {
   if ($i>0) $sql .= " INNER JOIN `pages` as t".($i+1)." ON t".($i+1).".`id` = t".$i.".`parent`"; // добавляемем условия джойнов
   $where[] = "t".($c-$i).".`name_url` = '".$path_parts[$i]."'"; // собираем части WHERE
}
$sql .= ' WHERE '.implode(' AND ', $where); // собираем запрос воедино
//echo $sql; // должно получится как выше, только в одну строку




проблема со страницами такого плана

www.site.ru/contact/

www.site.ru/eng/contact/

выводит инфу www.site.ru/contact/  по обоим запросам и допустим 
www.site.ru/eng/info доступна по www.site.ru/info /


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.1056 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.