Давайте посмотрим мою ЦМС

pilot911

Новичок
маленький оффтоп:

любая современная цмс, которую пишут уже (Sic!) не просто для учебы, а для возможности заработать (Sic!) должна иметь возможность динамически создавать типы данных без ручной правки базы и форм (в лучшем случае, конечно)
если в этой цмс поля для сущности нужно добавлять руками в шаблоне, базе, обновлять код для сохранения - такая цмс не взлетит :)

ПС. неймспейсы - это добро, иначе - криворукость и издевательство над разумом
 

Активист

Активист
Команда форума
И в итоге вы получите битрикс :)) :)) или 1С.

Лучше подправить структуру СУБД, чем валять хер знает что и сколько это будет есть, хотя можно использовать code generator's, но исходя их эконочической целесообразности нужно принимать решение, что дешевле, один алтер к таблице и все строчки кода для единовременного изменения или же писать обработчик и кодегенераторы.

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

pilot911

Новичок
И в итоге вы получите битрикс :)) :)) или 1С.

Лучше подправить структуру СУБД, чем валять хер знает что и сколько это будет есть, хотя можно использовать code generator's, но исходя их эконочической целесообразности нужно принимать решение, что дешевле, один алтер к таблице и все строчки кода для единовременного изменения или же писать обработчик и кодегенераторы.

Я пишу для не только для возможности зарабатывать а просто для того, что бы зарабатывать?
ну если для заработка на коленке (сомневаюсь, что этот продукт в таком виде будет кормить тебя десятки лет) - то выбрал правильный неправильный путь, а если зарабатывать на фрайнчайзинге - тут нужен другой путь, ибо, например, обновления загубят все правки в коде
 

pilot911

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

Активист

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

Духовность™

Продвинутый новичок
маленький оффтоп:

любая современная цмс, которую пишут уже (Sic!) не просто для учебы, а для возможности заработать (Sic!) должна иметь возможность динамически создавать типы данных без ручной правки базы и форм (в лучшем случае, конечно)
а я вот поставил знакомому какую-то мощную CMS, он её увидел и испугался. В итоге он сам скачал CMS и поставил её себе. Я посмотрел в код - там говнище жуткое. Примитивно все до нельзя, но он от неё в восторге.

Это я к тому, что 90% всего этого сложного функционала CMS никому не нужно. Никто не спешит во всем этом разбираться. Ни владельцы сайтов, ни офисный планктон, для которого самая примитивная CMS - это верх сложности. Ну а о поддержке CMS типа Битрикс - вообще отдельный разговор. Пол жизни можно будет разбираться.

Конечному заказчику нужен простой и доступный функционал, а не панель управления космическим кораблем.
 

Активист

Активист
Команда форума
Активист
1. Вообще идея создания УРЛов через единый механизм предполагает то, что абсолютно все УРЛы на сайте будут создаваться через этот самый механизм.
Отсюда "полной" изоляции модулей не будет. Как минимум на главной у Вас будут ссылки на разные модули. Но и в процессе работы наверняка придётся ссылаться из модуля на модуль.
2. Вы не учли того, что УРЛ может быть не только на детальное отображения объекта. (то есть нужны ещё параметры для makeUrl)
2.1 Если объект существует и определён , то как минимум. ещё нужны урлы для его редактирования, удаления
2.2 Объект не существует (урл на создание/добавление материала) или не определён (урл на поиск обьекта по критериям, отображение материалов в виде списка и т.д и т.п)
1. Вообще, пришел к тому, что роутер делает задачу - сохранить уникальный урл в бд, и по нему уже вытягивать (нужно для поисковиков), но при этом ведь я могу использовать любой вид (в моем случае это шаблон). Я пришел к выводу что VC в MVC у меня слегка страдает, получается совсем не обекты, а "оснаска"... Вот думаю, как бы подправить. Пока роутер справляется.

2. Адмннка как приложение или модуль выпилена, задачу доступа переложил на все контроллеры.

2.1., 2.2. Это ведь задача вида, вот пусть он и думает, а не роутера. Роутер здесь просто как помощник. Кроме того, никто не отменял ID, это ведь основа. Или я не прав?
 

Mols

Новичок
Вообще я не совсем понимаю в чем вопрос.

1. Роутер понятно что должен делать... из некоторых исходных кирпичиков (ид документа, или модуль-контроллер-актион или может ещё какие нить) + доп параметры сделать такой УРЛ который он же потом сможет однозначно распознать в эти же "кирпичики" и доп параметры.
Понятно, что по этим "кирпичикам" приложение должно однозначно идентифицировать исполняемую логику (опять же если есть модуль-контроллер-актион, если нет, то сообразно архитектуре приложения).

2. Тут тоже не совсем понятно... предполагается, что редактирование/удаление будет доступно только через админку чтоли? То есть на сайте никогда не будет материалов, которые могут публиковать и редактировать пользователи? Теже комментарии, или статьи... отзывы... в общем не понял я ничего.

2.1 2.2 Какая задача вида? Для того, чтобы перейти на страничку, где можно увидеть список - нужен урл. На поиск- тоже урл. Это как раз задача роутера. А вот вопрос реализации открыт... как это лучше сделать надо по месту смотреть. В любом случае это будет какой-то компромисс))) Серебряную пулю ещё не отлили)))
 

Активист

Активист
Команда форума
Давайте обсудим структуру агрераторов (или мепперов, если я не путаю), суть такая - нужен инструмент, который будет хранить в себе нужные обекты, т.е., создавать их из субд (у меня это аггреатор):
http://svn.local.prime-gr.ru/svn/baikalia.web.local/modules/pages/classes/pages/aggregator.php

Сейчас возникает проблема. Из модели (например - выбрасть все страны) или например самого объекта нужно получать объекты (например для проверки существования страницы с таким же урл). Так вот, если делать что-то вроде

$agregator->append(array('id' => $this->getId(), 'urlPart' => $this->getUrlPart()), array('sort' => 'position', 'sortType' => 'desс'));

Получится, что по сути обект знает о хранении и занимается не своим делом, тогда правильнее делать так (как сейчас реализовано):

$aggregator->appendByURLPart($this->getUrl());

Первый вариант:
+ Быстрая модификация;
+ Изменение кода не влияет на другие участки кода;
- Объект зависим от структуры БД
- Модель и т.п. знают о том, о чем ему знать не положено.
- Не возможность делать сложных запрос (джойны, вложенные запросы)

Второй вариант:
+ По сути так же быстрая модификация кода;
- Изменение может повлиять на другие участки логики (как выход на каждый элемент кода создавать свой метод в агрегаторе или жесткое разграничение, короче тут я пока логично все не выстроил и слегка запутался, но могут возникнуть случаи когда еще кто-то из разработчиков решил использовать "подходящий" ему метод, но созданный для других целей)
+ Рождение объектов независимы
+ Модель и т.п. ничего не знаю о том, как там все работает
+ Ни каких ограничений по сложности запросов
- Внесение изменений влечет в свою очередь не только изменение самого агреатора, но и других участков кода, например модели или виджета (где еще использовался этот метод), и соответственно приходится искать, где еще используется этот метод и вносить изменения.

Кто как решает подобные задачи?. Нужна правильная архитектура
 

Активист

Активист
Команда форума
Блин! Что за тишина?! Любители теории, а так же те кто не прочь обо....ть чужой код, где вы???
 

Alien85

I like my cat
так тебе же с этим кодом работать, делай как считаешь удобнее.
 

Активист

Активист
Команда форума
Дк.. не как удобнее, вопрос, а как правильнее. Удобно много чего (промолчу), а правильно надо :)

Тривиальная же задача, кто как ее решает?
 

AmdY

Пью пиво
Команда форума
правильно - это как удобно, это единственный критерий, которым стоит руководствоваться. Правильно делают в java, со всеми их DI, Spring и десятком классов для реализации обычного списка (и даже это ненужное в php говно перетащили в php через spl).
Первое что у тебя неудобно - это странные названия, они должны стремиться к универсальности
$agregator->fetchColumn('country', $where = "lang = 'ru'", $uniq = true);
во вторых, чтобы не заниматься копированием и плодить похожие методы, их нужно вынести в отдельного родителя и пользоваться наследованием.

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

cDLEON

Онанист РНРСlub
Ну ок. Сделаю ещё один вброс!
Вьюха живёт своей жизнью в core. Что если я, допустим, хочу вывести отдельно страницу с абсолютно другим дизайном ? exit ? :)
PHP:
		switch (sizeof(core::getInstance()->urlInterface()->folders())) {
			case 0:
				return $this->index();
			case 2:
				if (core::getInstance()->urlInterface()->file() === EASYCMS_DEFAULT_REQUEST_FILE) {
					return $this->index();
				}
				return $this->country();
				
			case 3:
				return $this->city();
				
			case 4:
				return $this->hotel();
				
		}
А это вообще что ? Вернее нахера ? :)
Да и так... Бегло пробежавшись... Задаю себе вопрос - где здесь CMS, вернее её АПИ ? Всё делается ручками. :)
То, что здесь до контроллера модуля добегает "автоматом", и используется псевдо-ооп, не делает эту КМСку лучше, чем гостевую книгу, написанную, лапшой.
 

cDLEON

Онанист РНРСlub
$MySQL = core::getInstance()->databaseInterface()->MySQL();
Это ещё что за беда в твоих агрегаторах ? :) Захочу переехать на Sqlite, к примеру, мне что по всей твоей КМСке шестерить и менять Mysql на Sqlite ? :)))
 

Активист

Активист
Команда форума
> Вьюха живёт своей жизнью в core. Что если я, допустим, хочу вывести отдельно страницу с абсолютно другим дизайном ? exit ?
Плохо смотрел. Меняй шаблон, скажи контроллеру осн. модуля.

> А это вообще что ? Вернее нахера ? :)
Тогда как?

> где здесь CMS, вернее её АПИ ? Всё делается ручками.
Да не у меня роботы работают за меня, все пишут.

> Это ещё что за беда в твоих агрегаторах ?
Можешь поправить интерфеис или да - меняй ручками, твой вариант реализации?

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

Активист

Активист
Команда форума
> используется псевдо-ооп
Вот тут конкретику пожалуйста, обоснуй!
 

cDLEON

Онанист РНРСlub
То, что есть у тебя - это какой то синглтон-автоинициализатор других синглтонов в неявном виде. Ни о какой архитектуре речи не идёт даже. Один огромный комбайн, который больше ни хера не делает.
 

Активист

Активист
Команда форума
> Один огромный комбайн, который больше ни хера не делает.
Еще траву полит, ога.

А что он еще должен уметь, коли речь зашла об архитектуре - то предложи свое веденье, просто это похоже на выброс, аргументируй. Или еще лучше, давай посморим твою :)
 
Сверху