Создание CMS. Общие вопросы.

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
patison
Сообщения: 2
Зарегистрирован: 2009.08.04, 02:00

Создание CMS. Общие вопросы.

Сообщение patison »

Привет, всем!
Увлёкся я данным фреймворком не так давно, однако он успел мне понравиться.
Сейчас имеется задание, а именно - надобно создать cms на основе Yii.
Что-же из себя должна представлять система? Ну в первую очередь отмечу что это должен быть не просто манагер инфы на сайте, это должна быть расширяемая система, с системой модулей, т.е. система, на базе которой можно будет строить более сложные системы.
В ходе проведенного анализа, пришёл к тому что система должна состоять из след базовых (core) компонентов (в скобках к каждому буду писать класс Yii, который, по моему мнению, выполняет необходимый функционал):
1. Request/Respone (CHttpRequest)
2. Url Mapping - т.е. модуль отвечающий за манипуляции урлами (CUrlManager)
3. Users (CWebUser)
3.1. Authentication/Authorization (CWebUser)
3.2. Roles (CAuthManager)
3.3. Profile
3.4. Membership
4. Permissions

Это то, что касается ядра.
Также необходимо предусмотреть механизм хуков (на примере того же drupal).
И + возможность конфигурирования каждого модуля в отдельности.

Хотелось бы услышать ваши мнения на этот счёт. Насколько тривиальна/не_тривиальна данная задача. Насколько сложно это сделать на Yii, и какой процент работ уже реализован в Yii.

Я себе пока довольно смутно, к сожалению, представляю как это реализовать. Т.к. до сих пор на Yii делал только парочку обычных веб-приложений.

Заранее спасибо!
Аватара пользователя
Razunter
Сообщения: 18
Зарегистрирован: 2009.07.04, 17:36
Контактная информация:

Re: Создание CMS. Общие вопросы.

Сообщение Razunter »

ИМХО, еще надо обязательно включить систему транслитерации названий файлов, т.к. многим будущим модулям она понадобится
Аватара пользователя
badenkov
Сообщения: 79
Зарегистрирован: 2009.06.22, 09:05
Откуда: Ижевск
Контактная информация:

Re: Создание CMS. Общие вопросы.

Сообщение badenkov »

Да, тема довольно интерсная. Имею такое же задание, над которым бьюсь уже больше месяца. Кратко опишу проблемы, с которыми столкнулся, и некоторые решения которые применил. Список необходимого функционала у меня получился примерно такой же, только реализовать его я решил по мере необходимости, пока стараюсь как можно универсальнее продумать самое ядро своей системы.
Изначально ставилась задача, чтобы url к страницам сайта имел вид как в файловой системе:
/about, /about/history и так далее. То есть, обращаться по имени страницы, причем у каждой страницы могут быть какие то дочерние страницы. И, в большинстве своем, страницы - это просто текст html. Хотелось как можно больше использовать уже готовый функционал Yii, но в итоге все равно пришлось написать свою версию класса CUrlManager. Потому что стандартный класс Yii не позволяет мне передавать параметры, содержащие внутри себя символ "/". Он их разбирает на Get переменные. Короче, в итоге я пришел к следующей таблице, которая в моей системе является своего рода частью моего urlmanager-а, к тому же, еще на основе этой таблицы я получаю меню для моих страниц, хлебные крошки и карту сайта.
Вот такая таблица (правда она у меня от версии к версии меняется, пока толком не определился, стараюсь сделать проще и универсальнее):
TABLE Page (
id - первичный ключ
parentId - id родительской страницы
name - название страницы на английском языке
name_rus - название страницы на русском языке, для меню
url - UNIQUE - формируется в модели автоматически при сохранении (url родительской страницы + name)
route - контроллер/экшен - по умолчаниею у меня page/show, но ведь страницы могут быть и динамическими, например для дополнительных модулей, где содержимое будет формироваться из БД, будет модуль/контроллер/экшен)
layout - макет страницы
type - 0 - страница, 1 - раздел
pageTitle - заголовок окна браузера
keywords - для тега МЕТА
description - для тега МЕТА
title - заголовок страницы у меня хранится в отдельном поле, на странице это просто <h1> перед контентом
content - основное содержимое страницы
).
В моем классе urlmanager вполне нормально работает метод parseUrl, который обращается к БД, определяет route запрашиваемой страницы, в $_GET помещается id страницы. А вот с методом createUrl пока определиться не могу. Но есть вот такая задумка:
пусть в таблице Page значение route будет уникальным (повторяться может только page/show). Поэтому для создания url, методу необходимо будет найти необходимое поле route, и вернуть значение url из таблицы. Отсюда необходимым условием при установке модуля будет создание страницы для входа в модуль.

Одно до сих пор меня одолевает. Не могу четко представить как мне быть с меню. Делал и дополнительные таблицы с менюшками страницы, и пунктами каждой меню. Сейчас планирую отказаться от дополнительных таблиц в БД, и полностью основываться на таблице Page. Напишу класс navigation с тремя статическими методами: menu(), breadcrumb(), sitemap(). Для скорости думаю сохранять необходимую информацию из таблицы Page либо в файл, либо в какую то отдельную таблицу, но чтобы всю необходимую информацию сразу можно было получить за один запрос.

P.S. Ну вообщем основную мысль как смог - сформулировал, данным вопросом буду заниматься и дальше, в любом случае к чему-нибудь приду. Было бы интересно узнать любые мысли по этому поводу, искал в интернете - кругом одно и тоже, и почему то возникает мысль, что никому подобных задач не приходилось решать, а под цмс почему-то выдают блоговые движки.
patison
Сообщения: 2
Зарегистрирован: 2009.08.04, 02:00

Re: Создание CMS. Общие вопросы.

Сообщение patison »

Ну что-ж. Очень рад что нашёл кого-то с подобной задачей. Вместе, как говорится, веселее :)
По поводу УРЛов я пока что сомневаюсь... Мне почему-то кажется что вполне достаточно для сайта любой сложности (относительно, конечно) иметь урлы вида: имя_модуля/controller/action/параметры . Ибо в параметры можно запихнуть всё что угодно.
В вашей cms я смотрю вы уделили основное внимание понятию страницы и пункты меню. В моей старенькой cms, которую я писал с нуля на php без использования сторонних фреймворков, я тоже вертелся вокруг страниц.
Однако тут, я в первую очередь хочу определиться с понятием Модуль. Понять Что такое модуль, Какую он должен иметь структуру, вероятно, определить какой-то api для всех модулей. Может Yii предоставляет уже какие-то подобные механизмы?
Страницы, пока, думаю оставить абстрактным понятием (т.е. не хранить в базе в отдельной таблице pages контент страницы, а генерить содержимое в зависимости от url - т.е. в зависимости от вызванного модуля, контроллера и экшна).

Что скажете по этому поводу?

ps Ура, друзья! Сразу после написания этого поста наткнулся вот на это - http://www.yiiframework.com/doc/guide/ru/basics.module
Аватара пользователя
Caveman
Сообщения: 152
Зарегистрирован: 2009.04.04, 20:56
Откуда: Москва
Контактная информация:

Re: Создание CMS. Общие вопросы.

Сообщение Caveman »

patison писал(а):Сразу после написания этого поста наткнулся вот на это - http://www.yiiframework.com/doc/guide/ru/basics.module
Как неожиданно...

Наверно, стоило бы изучить документацию сначала, прежде, чем приниматься за написание CMS.
В шапке для Вас есть 3 ссылки для изучения.
Аватара пользователя
badenkov
Сообщения: 79
Зарегистрирован: 2009.06.22, 09:05
Откуда: Ижевск
Контактная информация:

Re: Создание CMS. Общие вопросы.

Сообщение badenkov »

По поводу структуры модуля я считаю определяться и нечего - в Yii уже все определено за нас.
По поводу того, что основное внимание уделил страницам - в связи с тем что разрабатываю цмс для управление сайтом, а не какое либо web приложение. На большинстве сайтов как раз и приходится работать со страницами.
Ну а по поводу параметров, которые можно передать экшену - тоже сначала хотел не париться, но мне не удалось передавать параметры со слешем, а без слеша не получится сделать видимость уровней страниц.
А там, где мне необходимо создавать содержимое динамически, в параметрах страницы у меня есть поле route.
Параметры я также могу передавать после знака ?, потом может быть сделаю как-то более красиво. И в итоге получается для доступа к какому-нибудь модулю будет например ссылка: /products?product=1. Поменяю данные в таблице Page, и доступ к этому же модулю при необходимости изменится например: /services/our/tovars?product=1.
Вот что еще бы хотелось додумать, так это использовать для передачи параметров вместо вопросительного знака - слеш, но не знаю как тогда различать, где url страницы, а где ее параметры.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Создание CMS. Общие вопросы.

Сообщение samdark »

«В шапке» — это было про http://yiiframework.ru/. На официальном сайте трёх ссылок нет.
Аватара пользователя
Caveman
Сообщения: 152
Зарегистрирован: 2009.04.04, 20:56
Откуда: Москва
Контактная информация:

Re: Создание CMS. Общие вопросы.

Сообщение Caveman »

badenkov писал(а):По поводу структуры модуля я считаю определяться и нечего - в Yii уже все определено за нас.
По поводу того, что основное внимание уделил страницам - в связи с тем что разрабатываю цмс для управление сайтом, а не какое либо web приложение. На большинстве сайтов как раз и приходится работать со страницами.
Ну а по поводу параметров, которые можно передать экшену - тоже сначала хотел не париться, но мне не удалось передавать параметры со слешем, а без слеша не получится сделать видимость уровней страниц.
А там, где мне необходимо создавать содержимое динамически, в параметрах страницы у меня есть поле route.
Параметры я также могу передавать после знака ?, потом может быть сделаю как-то более красиво. И в итоге получается для доступа к какому-нибудь модулю будет например ссылка: /products?product=1. Поменяю данные в таблице Page, и доступ к этому же модулю при необходимости изменится например: /services/our/tovars?product=1.
Вот что еще бы хотелось додумать, так это использовать для передачи параметров вместо вопросительного знака - слеш, но не знаю как тогда различать, где url страницы, а где ее параметры.
Настоятельно рекомендуется изучить документацию, а, в идеале, и API.
В частности, вопрос читабельной адресной строки рассматривается тут, а сам компонент urlManager обеспечивает очень гибкий вывод этих самых адресов.
Еще на форуме уже обсуждалась парочка вопросов, связанных с роутингом. Один из них был про динамические правила (как раз задачка для CMS)
Ответить