Jump to content
  • 0

Динамически меняющийся контент


rus
 Share

Question

Всем привет!

Суть вопроса: есть меню, адрес ссылки и название заранее неизвестен, так как он формируется из формы добавления раздела на сайт.

Нужно что бы при нажатии на ссылку, менялся контент в зависимости от того, на какую ссылку нажали.

З.Ы. страница одна - index.php

З.З.Ы. у меня получилось, но адрес страницы выглядет не так как хотелось бы, например: http://mysite.ru/rubrika_php/1

Вот хотелось бы без этой единички... код получается такой:

ссылка

<a href=\"http://".$_SERVER['HTTP_HOST']."/".$dir."".str2url($test['title'])."/".$test['id']."\">".$test['title']."</a>

.htaccess

RewriteRule ^([A-Za-z_0-9]+)/([0-9]+)/?$ index.html?id=$2

и запрос в бд

$id = $_GET['id'];
if (isset($id))
{
$result2 = mysql_query("SELECT * FROM pages WHERE id=$id");
$test2 = mysql_fetch_array($result2);
do {
...тут вывод контента...
}

Edited by rus
Link to comment
Share on other sites

20 answers to this question

Recommended Posts

  • 0

ну так и подгружай нужный контент АЯКСОМ по нажатию на ссылку.

Или загружай весь контент, но часть прячь и показывай нужный по нажатию на ссылку.

Или я что-то неверно понял?

Link to comment
Share on other sites

  • 0
ну так и подгружай нужный контент АЯКСОМ по нажатию на ссылку.

Или загружай весь контент, но часть прячь и показывай нужный по нажатию на ссылку.

Или я что-то неверно понял?

Нее, не то... ээм, вверху есть горизонтальное меню (выводится в цикле, добавление идет через форму в бд).

Например мы ввели в заголовок страницы: Рубрика пхп, на странице в меню ссылка будет: rubrika_php.

Добавили еще другую страницу (пишем по-русски, а выводит латиницей), страница одна (типа шаблон index.php).

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

Может вставкой шаблонов? Бррр... мне бы только идею и логику, ну и расписать теорию немного, а дальше я поковыряюсь и думаю что приду к нужному варианту. ;)

Link to comment
Share on other sites

  • 0

.....вообще невкурил что надо.... ;)

особенно это

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

эммм, сравнивать с получаемой переменой то всеравно придется

Link to comment
Share on other sites

  • 0
.....вообще невкурил что надо.... ;)

особенно это

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

эммм, сравнивать с получаемой переменой то всеравно придется

Ну на словах может и не совсем получается у меня правильно изъяснить свою мысль, поэтому я и привел код выше. Там то хоть понятно что к чему?

Нужно что бы было вот так:

<a href=\"http://".$_SERVER['HTTP_HOST']."/".$dir."".str2url($test['title'])."/\">".$test['title']."</a>

RewriteRule ^([A-Za-z_0-9]+)/?$ index.html

Без айди... как сравнить, если нажата эта ссылка, то выводи такой контент, если другая, то другой контент, но при этом выводится в одном файле index.php

Edited by rus
Link to comment
Share on other sites

  • 0

Ааа)) погодь. Ну тогда

"/".$dir."".str2url($test['title']).

а вот тут какой вид будет в урле?

если дир/блабала

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

Ну а в индексе это, что ты писал

$result2 = mysql_query("SELECT * FROM pages WHERE id=$id");

только ид в базе будет именем страницы.

Ну или через свитч-казе ассоциации имен страницы с ид сбахать...

Я правильно понял?

Link to comment
Share on other sites

  • 0
Ааа)) погодь. Ну тогда

"/".$dir."".str2url($test['title']).

а вот тут какой вид будет в урле?

если дир/блабала

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

Ну а в индексе это, что ты писал

$result2 = mysql_query("SELECT * FROM pages WHERE id=$id");

только ид в базе будет именем страницы.

Ну или через свитч-казе ассоциации имен страницы с ид сбахать...

Я правильно понял?

Вроде правильно, но как сравнивать (к стати, название страницы и ссылка - это одно и тоже поле "title", только оно на выходе преобразовывается в транслит) поле тайтл, если в бд оно русское, а на выходе транслит?

Постой ка... а разве можно id сравнивать с title? Если id - int(boolean), а title - varchar(string), или я что-то путаю?

З.Ы. ссылка будет выглядеть так: http://mysite.ru/rubrika_php/ (а название ссылки в бд: Рубрика пхп).

Edited by rus
Link to comment
Share on other sites

  • 0
а сама ссылка в базе есть? можно по ней искать ведь она тоже в своем роде уникальна как ид.

Я же написал как она формируется ;)

Есть в форме поле: input type=text name=title, пишешь в поле название раздела (Рубрика пхп) и оно заносится в бд.

На страницу выводится как: <a href="http://mysite.ru/rubrika_php/">Рубрика'>http://mysite.ru/rubrika_php/">Рубрика пхп</a>

Вот тут: <a href="http://mysite.ru/rubrika_php/"> транслит формируется на лету, то есть не в бд, а во время вывода на страницу, то есть прямо на странице.

Link to comment
Share on other sites

  • 0
Вроде правильно, но как сравнивать (к стати, название страницы и ссылка - это одно и тоже поле "title", только оно на выходе преобразовывается в транслит) поле тайтл, если в бд оно русское, а на выходе транслит?

Постой ка... а разве можно id сравнивать с title? Если id - int(boolean), а title - varchar(string), или я что-то путаю?

З.Ы. ссылка будет выглядеть так: http://mysite.ru/rubrika_php/ (а название ссылки в бд: Рубрика пхп).

Я там подразумевал что айдишником будут являтся титлы.

П.с - может ну его транслит и стоит в базу вбивать русский вариант и транлсит.....

хотя

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

А ссылка буде тогда

<a href=\"http://".$_SERVER['HTTP_HOST']."/".$dir."".$test['title_translit'])."/\">".$test['title_rus']."</a>

# тут функция по вычленению имени страницы, например active_page(....уровень);

$a = active_page(....уровень);

$result2 = mysql_query("SELECT * FROM pages WHERE `translit`='$a'");

Edited by Der neue Gesandte
Link to comment
Share on other sites

  • 0
Я там подразумевал что айдишником будут являтся титлы.

П.с - может ну его транслит и стоит в базу вбивать русский вариант и транлсит.....

хотя

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

А ссылка буде тогда

<a href=\"http://".$_SERVER['HTTP_HOST']."/".$dir."".$test['title_translit'])."/\">".$test['title_rus']."</a>

# тут функция по вычленению имени страницы, например active_page(....уровень);

$a = active_page(....уровень);

$result2 = mysql_query("SELECT * FROM pages WHERE `translit`='$a'");

1) То есть, как я понял надо в бд добавить еще одну строку с транслитом и соответственно в форме еще одно доп. поле?

2) $a = active_page(....уровень); уровень - mysql_num_rows? Что за уровень, можно немного поподробнее?

Добавил:

То есть примерно должно выглядеть так?

<?php
$result2 = mysql_query("SELECT * FROM pages WHERE `title`='$parents[1]' ");
$test2 = mysql_fetch_array($result2);
$parents = explode(" ", $test2);
?>

Так?

Еще добавил: слушай, кажется начинаю догонять... то есть я добавля еще доп. поле в бд, разобью эксплоудом строку урла и сравню значение со строки урла со значением транслита в бд, так?

Edited by rus
Link to comment
Share on other sites

  • 0
Еще добавил: слушай, кажется начинаю догонять... то есть я добавля еще доп. поле в бд, разобью эксплоудом строку урла и сравню значение со строки урла со значением транслита в бд, так?

именно)

Урл бьеш по слешам, а уровень это....смотри

эксплоуд дает массив

site.ru/papka/aaa/file.html

Т.е 0 это site.ru

1 - papka

2 - aaa

3 - file.html

Правда как видиш файл мы получим с раширением.

Но тут я вижу два варианта

1. При транслитировании русскоязычного названия сайта мы просто дописываем к сторке расширение файла,

2. Либо приводим file.html, полученый из урла к нужному виду, регуляркой или просто удалив опр.кол-во симовол с конца

Link to comment
Share on other sites

  • 0
именно)

Урл бьеш по слешам, а уровень это....смотри

эксплоуд дает массив

site.ru/papka/aaa/file.html

Т.е 0 это site.ru

1 - papka

2 - aaa

3 - file.html

Правда как видиш файл мы получим с раширением.

Но тут я вижу два варианта

1. При транслитировании русскоязычного названия сайта мы просто дописываем к сторке расширение файла,

2. Либо приводим file.html, полученый из урла к нужному виду, регуляркой или просто удалив опр.кол-во симовол с конца

Смотри, я пробовал вот так:

$info = " http://".$_SERVER['HTTP_HOST']."/".$dir."".str2url($test['title'])."/".$test['id']." ";
$url2 = explode("/", $info);
echo $url2[3];

Не выводит... если поставить 0 или 2, то выведет http: или site.ru.

А зачем указывать расширение файла, если его там и нет? К тому же можно всегда поставить ограничение на разбивку эксплоуда:

$url2 = explode("/", $info, 4);

Link to comment
Share on other sites

  • 0
дык http:// убери

а по идее этот кусок вообще можно откинуть и начинатьс dir

Спасибо тебе за подсказку, кажется начинает получаться. ;)

Как добью до конца, так отпишусь что к чему. :)

Link to comment
Share on other sites

  • 0

Не выводит контент... ;)

1) Добавил в бд поле: title2 - при занесении русские слова транслитерируются (проверял, все в порядке).

2) Ссылка:

<a href=\"http://".$_SERVER['HTTP_HOST']."/".$dir."".str2url($test['title'])."/\">".$test['title']."</a>

Обрабатывается в .htaccess так:

RewriteRule ^([A-Za-z_0-9]+)/?$ index.html?title=$1

На выходе имеем: http://mysite.ru/imya_razdela/

3) Обработка данных пришедших по этой ссылке:

$title = $_GET['title'];
if (isset($title))
{
$result2 = mysql_query("SELECT * FROM pages WHERE `title2`='$a'");
$test2 = mysql_fetch_array($result2);

$info = " ".$_SERVER['HTTP_HOST']."/".$dir."".str2url($test2['title'])."/ ";
$url2 = explode("/", $info);
$a = $url2[1];

do {
...контент...
}
while ($test2 = mysql_fetch_array($result2));
}

Блин, может чего напутал? :)

Edited by rus
Link to comment
Share on other sites

  • 0

Ну ты тут замудрил....

$a = $url2[1];

а тут не проверял что выдает?

И еще

.$dir."".str2url($test2['title'])."/ "

Вместо этого лучше использовать это

$_SERVER['REQUEST_URI']

и это прогонять через експлоуд

как то так


$url = explode("/", $_SERVER['REQUEST_URI']);
$page_active = $url[1]; # или 2....

$result = mysql_query("SELECT * FROM `pages` WHERE `title2`='$page_active'");

do {
...контент...
}
while ($test2 = mysql_fetch_array($result));
}

Link to comment
Share on other sites

  • 0
Ну ты тут замудрил....

$a = $url2[1];

а тут не проверял что выдает?

И еще

.$dir."".str2url($test2['title'])."/ "

Вместо этого лучше использовать это

$_SERVER['REQUEST_URI']

и это прогонять через експлоуд

Там нет принципиальной разницы что использовать, как ты говорил можно и просто от $dir отсчитывать.

Эхо выдает нормальный результат, то что нужно, но почему то работает только между:

do {

......

}

Вне его отказывается работать, так же как отказывается пахать в запросе к mysql.

Link to comment
Share on other sites

  • 0

Честно вообще не понимаю зачем тут использовать do while... ;)

$test2 = mysql_fetch_array($result);

тут же для извлечения данных из массива $test2 используются ключи с именем столбца...

echo $test['content'];

Если что, скинь сюда структуру таблицы, а то я никак невкурю...и тогда на локале проверю

Link to comment
Share on other sites

  • 0
Если что, скинь сюда структуру таблицы, а то я никак невкурю...и тогда на локале проверю

		 Поле   	Тип					  Сравнение				Ноль	   По умолчанию			   Дополнительно
id int(4) Да NULL auto_increment
title varchar(255) cp1251_general_ci Да
title2 varchar(255) cp1251_general_ci Да
full_text text cp1251_general_ci Да
meta_t varchar(255) cp1251_general_ci Да
meta_k varchar(255) cp1251_general_ci Да
meta_d varchar(255) cp1251_general_ci Да

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy