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 :: Cоздание много-многостраничного сайта.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
winddancer
Отправлено: 06 Мая, 2015 - 21:04:05
Post Id



Гость


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


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




Уважаемые програмисты, скриптеры, форумчане и все остальные, кто сюда по какому-то чуду зашёл. У меня назрел вопрос о создании много-много-много-много и ещё раз многостраничного сайта на php. Я буду держать информацию в MySQL, но прежде чем держать её там, я хочу научиться это делать на файлах. Моих попыток сделать это чудо было не мало. Вначале через конструкцию switch & ['PHP_SELF'], потом напрямую пытался прописывать ссылки, но гемороя было много. Хочется создать сайт с множеством страниц, а получается выводить только 1-й уровень ссылок. А подуровни ну никак. В следующих картинках я отображу то, что я хочу получить. И коментарий к тому, что я умею и то, что я никак не могу получить.
Итак. Есть типа у меня в мыслях мой личный сайт. Примерно такой структуры.

Нажмите для увеличения

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

Нажмите для увеличения


Для переключения первого уровня иерархии ссылок с генерацией я использую следующее.

menu.php
PHP:
скопировать код в буфер обмена
  1. $pages=array(
  2.   'main'=>'main',
  3.   '2nd'=>'2nd',
  4.   '3rd'=>'3rd',
  5.   '4th'=>'4th');
  6. foreach($pages as $key=>$value)
  7. {
  8.      if($_GET['page']==$value)
  9.      {
  10.           echo $pages[$_GET['page']];
  11.      }
  12.      else
  13.     {
  14.          echo '<a href="'.$key.'">'.$value.'</a>';
  15.     }
  16.     echo "<br />";
  17. }


content.php
PHP:
скопировать код в буфер обмена
  1. if(array_key_exists ($_GET['page'],$pages))
  2.       include('pages/'.$_GET['page'].'.php');
  3. else
  4.      include('pages/main.php');


Cо следующей конструкцией у меня получается выводить все ссылки левого меню.
Когда я использовал массив и foreach в страничках, мой файл content.php не выводил подуровни.

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

С моей стороны, когда закончу свой сайтик, впилю поддомен с этой же статьёй(много новеньких не могут разобраться и ссылкой на forum.php.su в благодарность) чтобы и другие не задавали такие тупые вопросы как это делаю я.

(Отредактировано автором: 06 Мая, 2015 - 21:07:08)

 
 Top
Ts.Saltan
Отправлено: 06 Мая, 2015 - 21:38:54
Post Id



Посетитель


Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013  
Откуда: Belarus


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




Легче сделать таблицу структуры меню:
| id | parent | title | href ...

тогда менюшка вида

Меню1
--подменю1
---подподменю1
Меню2

будет записана так:

id | parent | title
1 | 0 | Меню1
2 | 1 | подменю1
3 | 2 | подподменю1
4 | 0 | Меню2

т.о. можно добиться бесконечной вложенности

И выводить такое меню проще: делаем выборку всей таблицы, потом, учитывая значение parent, относим к подменю или к меню

(Отредактировано автором: 06 Мая, 2015 - 21:39:43)

 
 Top
winddancer
Отправлено: 07 Мая, 2015 - 09:26:49
Post Id



Гость


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


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




Ts.Saltan пишет:
Легче сделать таблицу структуры меню:
| id | parent | title | href ...

тогда менюшка вида

Меню1
--подменю1
---подподменю1
Меню2

будет записана так:

id | parent | title
1 | 0 | Меню1
2 | 1 | подменю1
3 | 2 | подподменю1
4 | 0 | Меню2

т.о. можно добиться бесконечной вложенности

И выводить такое меню проще: делаем выборку всей таблицы, потом, учитывая значение parent, относим к подменю или к меню


Создать таблицу без проблем. Сортировку в первом меню по параметру `parent` аналогично без проблем. Вопрос тогда глубже. Как в content.php это всё отобразить?
И ещё одно. Эти подменю должны быть внутри последующих страниц, а не в левом меню.


По сути. Я хочу создать каталог внутри 2nd ссылки. А в каталоге будет имется ещё список подкаталогов. Девушка занимается рукоделием и хочет их опубликовать в интернете свои работы чтобы принимать участие в конкурсах. Она занимается плетением фенечек и прочей лабуды. Вот и это надо влепить внутрь многоуровневого сайтр.

(Отредактировано автором: 07 Мая, 2015 - 09:33:45)

 
 Top
DeepVarvar Супермодератор
Отправлено: 07 Мая, 2015 - 09:53:00
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




На вот, почитай за мой велосипед, там эти проблемы решены: http://www[dot]deep-cms[dot]ru/articles/[dot][dot][dot]th-deep-cms[dot]html
 
 Top
winddancer
Отправлено: 07 Мая, 2015 - 10:09:33
Post Id



Гость


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


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




DeepVarvar пишет:
На вот, почитай за мой велосипед, там эти проблемы решены: http://www.deep-cms.ru/articles/create-sites-with-deep-cms.html

Я конечно скажу спасибо за Ваш велосипед, но беда в том, что я бы по такому принципу мог бы скачать другие велосипеды и разобрать их по винтикам таких как WordPress и ему подобные. Но беда в том, что я не могу отследить в любых CMS логическую цепочку последовательности с впилением множества функций и объектов. По сему и обратился сюда. А грубо по сути я бы мог создать тот же сайт на WordPress, Joomla, Drupal и т.д. но толку от этого не будет из-за того, что оно не моими руками деланно.

Вам же известно о малине ощущений, когда Вы делаете всё своими руками(как было, когда Вы дописывали последние винтики вашего CMS)

P.S. С CMS по сути я знаком(в обширных понятиях), как устроено "это" и что можна делать с "этим", но хочу написать свой "самокат", а не велосипед под свои нужды.

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

С найлучшими пожеланиями Подмигивание
 
 Top
DeepVarvar Супермодератор
Отправлено: 07 Мая, 2015 - 10:11:30
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Есть же исходники. В них все будет видно. Я же не предлагаю юзать. Я предлагаю подглядеть.
 
 Top
Panoptik
Отправлено: 07 Мая, 2015 - 10:23:41
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


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




если отказаться от файлов, то в бд все это реализуется.
есть 3 варианта хранения деревьев в БД.
    adjacency list
    nested sets
    materialized path
    Сlosure Table (by Мелкий edition)


во втором посте Ts.Saltan вам посоветувал первый вариант,
DeepVarvar с его велосипедом использует нестед сетс.

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

что касается очень-много-много-... страничного сайта. то с вариантом

if($_GET['page'] == 'main') вы далеко не уедете. нужно копать в сторону архитектуры приложения. посмотрите в сети материалы о фронт контроллере и роутере

(Отредактировано автором: 07 Мая, 2015 - 11:02:02)



-----
Just do it
 
 Top
Мелкий Супермодератор
Отправлено: 07 Мая, 2015 - 10:47:57
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Panoptik пишет:
есть 3 варианта хранения деревьев в БД.

4. Closure Table пропустили.

Panoptik пишет:
что касается очень-много-много-... страничного сайта. то с вариантом
if($_GET['page'] == 'main') вы далеко не уедете.

Та запросто:
PHP:
скопировать код в буфер обмена
  1. if($_GET['page'] == 'main') {
  2. // это главная страница
  3. } else {
  4. // остальное ищем в денормализованной базе любого из деревьев по совпадению урла
  5. }

Радость


-----
PostgreSQL DBA
 
 Top
Panoptik
Отправлено: 07 Мая, 2015 - 11:03:33
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


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




простите, сэр
добавил Сlosure Table в пост

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


-----
Just do it
 
 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