Forum Webscript.Ru
		Программирование => PHP => Тема начата: Ilya Shuma от 13 Апреля 2005, 18:10:35
		
			
			- 
				Всем привет!
 Вот возникла потребность написать CMS на php. Не обошлось без проблем.
 С php потихоньку разбираюсь, ман, форумы, тут все впорядке.
 Но не могу для себя определить именно концепцию cms,  ее структуру.
 Посему вопрос к вам.
 Как вообще работает смs? какие варианты существуют?
 Мне не нужны скрипты, нужна идея, что ли.... А реализовать-то дело нехитрое :)
 
 Заранее огромное спасибо!!!
- 
				работает это так:
 для редактора:
 через удобную морду записываются данные для показа пользователям.
 для посетителя:
 данные кладутся на шаблоны ну или наооборот.
- 
				Ну это понятно, лежит на поверхности :) Мне не понятна концепция работы скриптов (т.е. выполняемых ими функция). Как лучше обработать данные из форм, что лучше использовать для хранения, файлы или базу и т.д.
			
- 
				Что пришло в мою дурную голову :)
 
 В общем у меня есть некий сайт, в котором n-ное число ссылок и n-ное число подссылок в каждой из них. Нужно обеспечить админу полную свободу: редактирование ссылок, текстов, всего прочего.
 
 Что я делаю.
 
 Создаю шаблон, в котором вывожу значение переменных:
 =$text;?> - текст
 =$title; ?> - заголовок
 
 основные ссылки:
 =$link1;?>
 =$link2;?>
 и т.д.
 
 И второстепенные
 =$sublink1;?>
 =$sublink2;?>
 
 Далее создаю файл conf.php, в которром содержится вся информация о страницах в виде массивов.
 
 
 
 $pages = array ();
 
 // информация о основных ссылках
 $pages[\'mainlinks\']	=	array
 (
 \'link1\'		=> \'somevalue\',
 \'link2\'		=> \'somevalue1\',
 );
 //информация о странице index:
 $pages[\'index\']	=	array
 (
 \'title\'		=> \'sometitle\',
 \'text\'		=> \'some text\',
 //указываю, какие ссылки активные, а какие-нет
 
 \'link1active => \'active\',
 \'sublink1active\'=> \'\',
 
 //информация о подссылках
 \'sublink1\'		=> \'\',
 \'sublink1a\'	=> \'\',
 \'sublink1href\'	=> \'\',
 );
 
 ......................
 и все в таком же духе...
 далее создаю файл, связывающий шаблон с conf.php - process.php
 
 $text = "{$pages["{$pagen}"][\'text\']}";
 $title = "{$pages["{$pagen}"][\'title\']}";
 $mainl1 = "{$pages[\'mainlinks\'][\'link1\']}";
 $mainl1a = "{$pages["{$pagen}"][\'linkmain1a\']}";
 .............
 
 Далее создаю непосредственно страницы.
 Код для каждой страницы следующий:
 
 
 include "conf.php";
 $pagen="index"; //идентификатор, используется в href`ах, при обращении к массиву
 include "pagesource.php";
 ?>
 
 
 Вот. Отделение шаблона и кода.
 
 Ну а далее администрирование:
 Создаем шаблон админского интерфейса с текстареями, чекбоксами и т.д., значения в которые подставляем из тех же переменных, которые использует основной шаблон. Далее редактируем, передаем post`ом значения в файл write.php, который изменяет значения массива....
 
 
 Что скажете о таком способе? Меня что-то смущает запутанность. Чувствую, что можно все ужать, но как пока недотумкаю :)
 
 Буду благодарен за мнения :)
- 
				Ilya Shuma:
 Как вообще работает смs? какие варианты существуют?
 
 ЦМС работает так, как напишешь.
 
 Вот, может, будет интересно:
 http://www.livejournal.com/users/cgvictor/20840.html
 [off]Стараюсь, чтобы выглядело не как реклама[/off]
 
 Ilya Shuma:
 Что скажете о таком способе?
 
 Я бы просто сделал дерево (да хоть nested trees) и подключал бы к узлам физические файлы. Проще было бы.
- 
				Ilya Shuma 
 лично я бы меню сделал в виде ini-файла
 читать его можно через parse_ini_file()
 
 но вообще такая структура неправильная.
 
 тебе надо разделить скрипты и данные.
 в меню описываются только скрипты.
 а данные лежат себе там, где лежат - в файлах или базе.
 и список ссылок на них строится динамически.
 к примеру, в меню у тебя ссылка на скрипт новостей.
 а уже этот скрипт читает новости, к примеру из файла, и выводит ссылки-заголовки.
- 
				Ilya Shuma:
 Вот возникла потребность написать CMS на php.
 
 
 Вы уверены, что у вас именно такая потребность? Зачем вам именно CMS? Почему вы не хотите воспользоваться доступными бесплатными CMS?
- 
				Croaker 
 Хочу сам написать :) Ведь знание синтаксиса языка недостаточно. Важно понять семантику, принципы, концепцию программирования. А практика этому, по-моему, способствует :)
- 
				Была на эту тему статья давным-давно, на detail.phpclub.net. Смысл ее сводился к тому, что учиться писать надо не на крупный проектах (там в качестве примера был приведен форум, тут - цмс, не суть важно), а на небольших задачах. 
 
 ИМХО: Чтобы написать хорошую ЦМС, нужно четко представлять себе - зачем она нужна. Но не в том смысле, что "она нужна чтобы научится писать программы", а в том "какие задачи будет решать моя ЦМС" или, что  на практике чаще происходит, "мне нужно решить такие-то такие-то задачи и для этого мне требуется написать ЦМС с такой-то функциональностью".
- 
				Croaker 
 Ну я, вероятно, не совсем корректно выразился... Я не говорю об универсальной cms с  широким диапазоном возможностей и настроек. То, что мне нужно, можно, скорее, назвать небольшой администраторской панелью. Клиент хочет самостоятельно обновлять тексты, добавлять и удалять ссылки. Воть :)
 
 А про то, что учиться надо на небольших примерах я полностью согласен. :beer:
- 
				Ilya Shuma:
 То, что мне нужно, можно, скорее, назвать небольшой администраторской панелью. Клиент хочет самостоятельно обновлять тексты, добавлять и удалять ссылки. Воть
 
 Вот и замечательно. Значит, есть место, где тексты и ссылки храняться. Нужно сделать отдельный интерфейс для изменения этих данных и прикрутить к нему проверку доступа.
 Вопрос-то в чем?
- 
				CGVictor 
 Да я уже разобрался, сделал выводы :)
 
 Спасибо всем!