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 :: Deep-CMS

 PHP.SU

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


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

> Описание: Сезон типа пошел )))
DeepVarvar Супермодератор
Отправлено: 15 Марта, 2012 - 15:30:08
Post Id



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


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


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




Смотрю сезон пошел на собственные велосипеды )))
Я тоже не отбился от рук.
Правда еще не допилены некоторые места.
Официально "релизнуться" хотелось бы к концу этого месяца.
Но обещать ничего не буду...

Собственно пощупайте:

http://cms[dot]deepserver[dot]ru/

http://cms[dot]deepserver[dot]ru/admin
PFS-admin
123456

Курочить можно только то что разрешено правами для данного пользователя. )))
Вот скрин прав:

Собственно все вопросы и предложения будут мной внимательно выслушаны.

Закатив глазки

Допишу сюда.
Человек не с форума сказал:

1) заменить ссылки "редактировать" и "удалить" на соответствующие иконки.

И еще ОЦЕНИТЕ ПОЖАЛУЙСТА УДОБСТВО И ПОНЯТНОСТЬ ПО 10-тибальной ШКАЛЕ

(Отредактировано автором: 15 Марта, 2012 - 15:47:12)

 
 Top
caballero
Отправлено: 15 Марта, 2012 - 15:51:45
Post Id


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


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


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




это - больше к пользователям

эдесь в основном программеры - им интересно внутренности а не цвет
текста и количество менюшек


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
DeepVarvar Супермодератор
Отправлено: 15 Марта, 2012 - 15:56:49
Post Id



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


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


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




Если все по времени срастется, выложу код к концу месяца.

caballero, а ты заметил что документы бывают разных типов?
т.е. модули для новостей, статей и каталога писать не надо..
А вот плагины, такие как регистрация, корзина, обратная связь, личный кабинет - уже надо.
Зачатки их уже есть.
Просто хотелось бы запилить готовый набор с основными плагинами и исправить баги.
Затем выкладывать и код...
 
 Top
DelphinPRO
Отправлено: 15 Марта, 2012 - 16:06:52
Post Id



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


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


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




caballero пишет:
эдесь в основном программеры - им интересно внутренности а не цвет
текста и количество менюшек

точно Улыбка


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
DeepVarvar Супермодератор
Отправлено: 15 Марта, 2012 - 16:08:51
Post Id



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


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


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




Тогда я немного рано Закатив глазки
Но продолжу в этой же теме.
 
 Top
EuGen Администратор
Отправлено: 15 Марта, 2012 - 16:50:39
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




DeepVarvar
Даже с точки зрения юзабилити.
0. Разрешить ввод логина без учета регистра
1. Не показывать те элементы управления, которые предоставляют действия, недоступные в силу ограничений прав роли
2. При добавлении документа, если заполнены не все поля, происходит их сброс после сообщения об ошибке (представим, что я заполнял этот документ часа 2-3)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DeepVarvar Супермодератор
Отправлено: 15 Марта, 2012 - 16:51:46
Post Id



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


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


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




EuGen, принято, сделаю.
Так же заменить htmlspecialchars на htmlentities при записи строк в базу,
но данная проблема только в контексте ЦКэдитора.
Даже не знаю, модет сам админ захочет добавить в страницу некоторый js-код,
ну например карту яндекса или гугла...

(Отредактировано автором: 15 Марта, 2012 - 17:10:01)

 
 Top
DeepVarvar Супермодератор
Отправлено: 15 Марта, 2012 - 19:21:25
Post Id



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


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


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




Так я не понял, это меня по XSS ломанули,
или legal означает что в поле CKEditor можно вставлять различные скриптовые конструкции?
Вопрос находится тут:
http://cms[dot]deepserver[dot]ru/test
 
 Top
EuGen Администратор
Отправлено: 15 Марта, 2012 - 20:12:43
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




DeepVarvar
Это я Вам оставил подсказку. Дело в том, что, имея лишь ограниченный аккаунт, можно попытаться таким образом завладеть аккаунтом root-пользователя. Это в предположении, что на конечном сайте, который будет строиться на этой CMS, будет несколько пользователей, например, контент-менеджеры. Разумеется, вряд ли кто-то сам себе будет писать подобное, но если к примеру контентом занимается сторонняя компания - почему бы и нет.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DeepVarvar Супермодератор
Отправлено: 05 Июня, 2013 - 09:22:35
Post Id



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


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


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




.
Я говорил что не буду создавать новые темы когда есть хоть и старая, но моя?
Ну если не говорил - значит говорю - да, я подниму старую тему, чтобы все были "в теме".

На самом деле гдето есть тема, посвещенная этому вопросу, которая еще старше этой.
Но - прах её пуху, или пух её праху, не важно..

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

Ниже прикреплен архив с мини-сборкой.

Чем же мини- отличается от макси- ?
Всего-лишь тем, что в мини-сборке отсутствует то самое "вкусное" динамическое дерево документов.

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

Я конечно же вскоре выложу сюда полную версию.
Но вернемся к тому что я предоставил здесь и сейчас.

Увы - к текущему моменту не написано ни строчки документации.
Валяются где-то пара файлов с черновым текстом, и только..

В архиве есть папочка install, в которой все достаточно подробно описано, как запуститься.

Этого достаточно, да не совсем.
Для начала работы еще необходимо создать "тему" через которую будет выводиться контент для пользака.
Создается она в папке application/layouts/themes/название_вашей_темы
Создав пустую папку темы, пройдите в админке в "Глобальные настройки".
Вываливающиеся исключения подскажут какие папки и файлы являются для темы обязательными.

Теперь немного практики.
В папке application/modules/ можно создавать свои модули, контроллеры..

Если вы создаете модуль:
Создайте папку с именем модуля, например mymodule.
В эту папку положите файл с именем mymodule.php - это локалный bootstrap модуля.
Создайте рядом с этим файлом папку controllers, в неё вы будете класть контроллеры этого модуля.
Локальный bootstrap, естественно, выполняется всегда,
не зависимо какой из контроллеров модуля запросили.

Если вы создаете простой контроллер:
Создайте папку с именем контроллера, например mycontroller.
В эту папку положите файл с именем mycontroller.php.
Этот контроллер будет "сам себе bootstrap".

При парсинге строки запроса система ищет соответственно части вида:

/module/controller/action?p=123
/controller/action?p=123
/module/controller?p=123

По умолчанию, если строка запроса пуста (главная страница),
вызывается application/modules/main/main.php.
Данное поведение реализовано только в этой сборке, только в виде "костыля".

По умолчанию у всех вызывается метод index().

Любой из файлов модулей/контроллеров должны в себе содержать как минимум это:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. class mycontroller extends baseController {
  4.  
  5.   public function index() {
  6.  
  7.     view::setProtectedLayout("name.html");
  8.  
  9.   }
  10.  
  11. }


Как видно из примера:

1) Все контроллеры наследуют и расширяют класс baseController
2) Обязательно нужно указать шаблон вывода.
3) Обязательно нужен метод index().

На разницу protected и public видов шаблонов в данной сборке можно подзабить.
Есть два метода setProtectedLayout() и setPublicLayout(),
которые подключают шаблон вывода соответственно из папок protected или public.

На самом деле шаблон вывода не всегда обязательно указывать.
Есть исключение - отличный от html контекст вывода.

Для тех, кто дочитал до этого места:
CMS поддерживает четыре контекста вывода - html, txt, json, xml.

Для тех кто не понял что это:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. class mycontroller extends baseController {
  4.  
  5.   public function index() {
  6.  
  7.     view::setOutputContext("json");
  8.     view::assign("test", array(1, 2, 3));
  9.  
  10.   }
  11.  
  12. }


При запросе урл http://localhost/mycontroller выведет:

{"test":[1,2,3]}

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

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. class mycontroller extends baseController {
  4.  
  5.   public function index() {
  6.  
  7.     // получаем айдишник из урл: http://localhost/mycontroller?id=534
  8.     // есть еще и request::shiftParam("имя_параметра");
  9.     // разница в том, что если делаешь get, то только считывает,
  10.     // а если shift, то считывает и удаляет из стека параметров,
  11.     // такое бывает иногда полезно
  12.     $id = request::getParam("id");
  13.  
  14.     // проверим число ли это
  15.     // проверка кстати не пропустит "всякую хрень"
  16.     // с пробелами, ведущими нулями и прочим невалидом..
  17.     if (!utils::isNumber($id)) {
  18.       throw new memberErrorException("Что за хрень?", "Ты прислал мне не число!");
  19.     }
  20.  
  21.     // отправляем строку во вьюху
  22.     view::assign("test", "Привет, это тест!");
  23.  
  24.     // как видно можно подавать сразу ассоциативный массив
  25.     view::assign(array("foo" => "bar", "baz" => "bla"));
  26.  
  27.     // а теперь его же, только иначе, разница будет видна в шаблоне
  28.     view::assign("arr", array("foo" => "bar", "baz" => "bla"));
  29.  
  30.     // добавили еще и тот полученный айдишник
  31.     view::assign("your_id", $id);
  32.  
  33.     // указываем через какой шаблон выводить
  34.     view::setProtectedLayout("name.html");
  35.  
  36.   }
  37.  
  38. }


Теперь сам шаблон.
Он должен лежать соответственно в:
application/layouts/themes/название_вашей_темы/protected/name.html
В данном случае это так, потому, что мы просили из папки protected.

CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php require "header.html"; ?>
  2. <div>
  3.   <div>Выводим приветствие: <?=$test?></div>
  4.   <div>Выводим то, что упало массивом: <?=$foo?> и <?=$baz?></div>
  5.   <div>Выводим то что явно было положено по ключу "arr":</div>
  6.     <?php foreach ($arr as $k => $v) { ?>
  7.     <div><?=$k?></div>
  8.     <div><?=$v?></div>
  9.     <?php } ?>
  10.   <div>Выводим айдишник: <?=$your_id?></div>
  11. </div>
  12. <?php require "footer.html"; ?>


При более глубоком "проникновении",
можно обнаружить что поддерживаются права доступа к контроллерам, их легко реализовать.

Админка - это всего-лишь модуль со своей "темой" отображения.
Только её шаблоны и сама она лежат не в "стандартных" местах.
Все это дает возможность легко расширять админку так как вам надо.

Встроенная поддержка локализаций - пишите сами, хоть китайский, хоть шуточный,
где вместо "Выход" на кнопке выхода будет например красоваться слово "Свалить в аут".
Локализация - может быть как глобальной, так и индивидуальной,
которая устанавливается в профиле у пользователя.

Поддерживается php 5.2 - для меня это важно.

------ -------- ------

Я даже не знаю что еще написать.
Возможностей настолько много, что это практически фреймворк, а не CMS.

Поэтому либо вспомню, либо напомните - допишу сюда или отредактирую.


З.Ы.:

1) Для тех кто захочет поискать тут MVC/HMVC/ORM - их тут нет и не будет!
2) Для трололо - я знаю что это очередной велосипед и бла-бла-бла..
3) Дополнение для предотвращения вопросов и советов:

Как реализован вывод?

view - это абстрактный статический класс, в котором есть много чего, но главное - там нет никакой шаблонизации.
Напротив - тут происходит обычный стандартный include файлов.
И прямо в файлах "шаблонов" можно совершенно спокойно вызывать все, что вам взбредет в голову.

Более того - если гдето при вызове внутри "шаблона" произойдет ошибка,
этот вывод будет стерт полностью и не отправлен в браузер.
Вместо него будет отрендерен новый вывод страницы с сообщением об ошибке и... снова всем что вам взбредет в голову в этом шаблоне.

Процесс попыток отрисовки (render tries) естественно не бесконечен.
В данный момент попыток всего две (меняется в пару телодвижений).
После исчерпания попыток выпадет стектрейс в takeUnexpectedException();
Естественно такое поведение позволительно только в режиме разработки.

Откуда ж растут ноги такого поведения?

Все очень просто.
Представьте - вы рядовой по-ха-пэ писатель.
Все, что вы умеете, это - вордпресс, жумла, "нарисовать" цикл вывода данных в шаблоне.

Ну так вот вы и рисуете свои шаблончики.
Создаете любую структуру документов в дереве.
И... лаконично выводите это в шаблон:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <div id="topmenu">
  2.   <?php foreach (dataHelper::getMenuItems(22) as $item) { ?>
  3.     <a href="<?=$item['page_alias']?>"><?=$item['page_name']?></a>
  4.   <?php } ?>
  5. </div>

Надо вывести прикрепленные документы к этому меню с ID равным 22,
но добавить к выводу анонсы (краткое описание) этих документов?
Пожалуйста:
PHP:
скопировать код в буфер обмена
  1. $items = dataHelper::getMenuItems(22, array("page_announce"));

Нет в данном документе поля page_announce? Система вернет его как пустое значение.
Сортировка? Конечно же да.

На таком же принципе работают и методы:

::getDocumentChildren();
::getBreadcrumbs();

Ну и т.д..
Главная мысль - попроси прямо в шаблоне.
Напомню еще раз - это актуально только для полной версии, в которой имеется динамическое дерево.
И напомню еще раз - это мини-урезанная-версия включающая в себя только "модули" а-ля CMF.
Сейчас же это просто полежит неиспользуемым во вьюхе и все.
.
.
.
.
------------------------
Архив >>> тут.
------------------------
Для тех, у кого траблы с DNS: http://zalil[dot]ru/34560849
------------------------
 
 Top
DeepVarvar Супермодератор
Отправлено: 05 Июня, 2013 - 12:16:26
Post Id



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


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


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




Сообщением выше добавлены ссылки на скачивание для тех у кого не скачивается с первой ссылки.

А это первый фидбэк:
Спойлер (Отобразить)
 
 Top
Мелкий Супермодератор
Отправлено: 05 Июня, 2013 - 12:26:53
Post Id



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


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


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




DeepVarvar пишет:
хеш зависит от группы

От группы доступа пользователя? При смене группы нужно знать и перехэшировать пароль?


-----
PostgreSQL DBA
 
 Top
DeepVarvar Супермодератор
Отправлено: 05 Июня, 2013 - 12:30:08
Post Id



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


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


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




Мелкий пишет:
От группы доступа пользователя? При смене группы нужно знать и перехэшировать пароль?
От айдишника группы - если пользаку сменили группу, то его старый хеш в куках не валиден.
Требуется перелогиниться.
 
 Top
Мелкий Супермодератор
Отправлено: 05 Июня, 2013 - 12:39:28
Post Id



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


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


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




Ах, это для авторизационной куки. Контекст потерялся, тогда логично.


-----
PostgreSQL DBA
 
 Top
DeepVarvar Супермодератор
Отправлено: 06 Июня, 2013 - 09:55:41
Post Id



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


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


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




Пофикшено все из фидбека esterio кроме:

1) version_compare() - оставлено как есть, проверка через приведение версии к (float)
2) SET NAMES - оставлено как было self::$mysqli->set_charset($charset);
и добавлен комментарий, что если у вас будет ситуация с непонятным багом,
то, мол, замените одно на другое.

3) подключить две или более баз - оставил возможность подключения только одной. На пока так.

4) md5(md5(md5($str))); - пусть как пасхальное яйцо останется.
crible crable booms - return triple md5 hash.

Добавлено в большом сообщении описание возможностей.
Обновлены архивы в большом сообщении с исправлениями.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Наработки по собственным проектам »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB