powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / [StartUp] новый php FrameWork - приглашаю к разработке
4 сообщений из 4, страница 1 из 1
[StartUp] новый php FrameWork - приглашаю к разработке
    #38177839
ArteNonMarte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разработан прототип. Интересует ваше мнение относительно концепции фреймворка.

Про команду

Ищу архитектора в проект на постоянной основе. Не откажусь от удалённых консультантов. Варианты участия обсуждаются (в т.ч. доля в бизнесе). Так же приглашаю в команду всех, кто .. обычно состоит в команде: кодеры, верстальщики, дизайнеры, менеджеры. Приглашаю проживающих в сПб. Рассмотрю предложения от студий, желающих взять фреймворк на вооружение.

Фреймворк пишется в первую очередь для собственных проектов и во вторую - для широкого внедрения. Основной проект: createrra.ru - соцсеть для стартапов. На его базе есть ещё несколько инфраструктурных проектов (расширяющих функционал Креатерры, но при этом самодостаточных, способных жить самостоятельно).

Кратко по основным моментам фреймворка.

Со стороны потребителя это выглядит как движок, на котором можно сделать социальную сеть, систему управления проектами, сайт или блог. Со стороны разработчика это выглядит как jQuery, только на PHP. При создании этого фреймворка я стремился оградить разработчика от общения со множеством классов и методов, предоставив удобные универсальные инструменты. Первый и основной из них — subject .

Магическая функция s() обеспечивает доступ ко всем свойствам и методам сабжей (subject - это всё, что размещено на сайте: тексты, проекты, комментарии, фотографии).

Запросить любой сабж можно указав его URL в запросе: s('//.img_a12_345')
При этом не требуется никакой инициации: сабж со всем свойствами и методами будет доступен сразу, в любом месте сайта.

Если нужно получить текущий сабж, то URL указывать не обязательно.
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
// например, текущйи сабж - некий проект по адресу
www.createrra.ru/pro_1/

// вернёт титл проекта
s('title'); 

// можно вызывать методы (создаст альбом для текущего сабжа):
s('!.add_album', 'title:Моя прекрасная няня;subtitle:как я провёл этим летом'));

// если нужно обратиться произвольному сабжу (не к текущему)
// используем двойной слеш в первом аргументе (точка как разделитель)
// вторым аргументом передаём URL сабжа,  а в третьем искомое свойство:
$date_add = s('//.pro_123.date_add');
$title = s('//.album_p12_345.title');



При выполнении запроса проводится проверка прав доступа. Если доступа нет, вернёт пустой результат
Так же, можно предварительно проверить права:
Код: php
1.
if (!s('title.@')){return 'секретный док';} // нельзя прочитать


Подробнее про работу с этой функцией: Двигатель: общий вид


Далее. Работа с текстом

Фреймворк позволяет использовать разные редакторы текстов (можно ставить сразу несколько редакторов), создавать тексты разных форматов. Для разных случаев жизни можно назначать соответствующие форматы, открывать и закрывать доступ к редакторам.




Имеется возможность вести историю изменений (при смене редактора или формата делается резервная копия).
Тексты хранятся в двух видах: сырой текст (raw) и преобразованный:



Имеется возможность вставлять свои теги. В частности, реализована быстрая вставка сабжей:

Код: php
1.
2.
[{post_p1_123}] // вставит ссылку на текст
[{img_a27_366 w:700}] // вставит картинку размером 700px



Далее, Widget

При помощи виджетов реализуются все замыслы разработчика относительно дизайна и функциональности сайта: создаются модули, текстовые блоки, формы, обрабатываются запросы.
Вызывается таким образом: wg('name','param');

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
// вызываем виджет комментариев
wg('comm');

// выведет четыре последних альбома
wg('album','lim:4');

// можно запросить метод виджета
wg('album.form'); //вернёт форму создания альбома



И так далее. Частично реализован кэш, работа с шаблонами, стилями. Есть интересные решения для работы с изображениями.

Более подробно разобрать проект можем при встрече.
Пишите вопросы/предложения здесь или на почту st.createrra собака ya.ru
...
Рейтинг: 0 / 0
[StartUp] новый php FrameWork - приглашаю к разработке
    #38180784
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArteNonMarte,

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

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

Ссылка на описание

Там мне как раз не хватало фреймворка для визуальной части.
Можно скооперироваться.
...
Рейтинг: 0 / 0
[StartUp] новый php FrameWork - приглашаю к разработке
    #38182069
ArteNonMarte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, это не только визуальная часть. Функция s() обращается непосредственно к ядру, запрашивая свойства и методы, при этом проводится проверка прав (функции безопасности).

Для бизнес-логики у меня используется класс Widget (примеры обращения есть в первом посте). Внутри виджета запросы к свойствам и методам идут уже через функцию s().

У свойств и у методов разные способы настройки прав доступа.
У методов можно настроить да/нет, а у свойств больше настроек:

Код: php
1.
2.
3.
4.
5.
6.
7.
// У свойств существует больше поводов для запроса/проверки
// сейчас их как минимум доступа пять (r.w.u.d.s)
// - чтение r - read
// - запись/создание w - write
// - редактирование u - update
// - удаление d - delete
// - изменение настроек s - sett




Свойства добавляются так же как и методы, при этом доступ задаётся тут же (наряду с прочими настройками):
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
class action_pro extends Action {
// класс сабжа хранится в папке /core/action/

// добавляем методы
function RegisterEvent(){

  $this->addEvent(array(
    'name'=>'show',
    'tpl' => 'pro.show', // шаблон страницы
    'access' => '1.1')); // группа прав доступа (берутся из конфига)
 ...
}

// добавляем свойства
function RegisterFields(){

  $this->addField(array(
    'name' => 'url', // имя поля (свойства)
    'title' => 'URL',
    'depth' => '1', // глубина запроса - загружаются только основные
    'val' => 'pro_[row.id]', // значение поля
    'access' => 'r:all;')); // права на действия со свойством
 ...
}



При запросе свойства вызывается соответствующий класс.
Например, для получения имени проекта вызывается класс title
Если идёт запрос на редактирование, вызывается класс title.set

Все [редкие] свойства хранятся в отдельной папке core/fields/
Наиболее популярные свойства хранятся в отдельном классе
Значения свойства вычисляются и заносятся в кэш (если какое-то значение изменилось, кэш обновляется)

Свойства могут быть типовыми, то есть получение и задание их значений обрабатывается одним классом. Например свойства титл и субтитл обрабатываются одним классом title. При добавлении свойства к сабжу можно указать тип - поле type, которое по умолчанию равно названию свойства:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
// добавляем свойства
$this->addField(array(
      'name' => 'title', // имя поля (свойства)
      'title' => 'Заголовок',
      'depth' => '1', // глубина запроса - загружаются только основные
      'val' => '[row.title]', // значение поля
      'isempty' => 'subj №[row.id]', // дефолтное значение поля 
      'access' => 'r:all;w:editor,u:editor')); // права на действия со свойством

$this->addField(array(
      'name' => 'subtitle', // имя поля (свойства)
      'type' => 'title', // <-------------------------------- тип поля
      'title' => 'Подзаголовок',
      'depth' => '1', // глубина запроса - загружаются только основные
      'val' => '[row.subtitle]', // значение поля
      'access' => 'r:all;w:editor;u:editor;d:editor')); // права на действия со свойством



Права доступа можно вписать непосредственно, либо вызвать какой-то набор настроек.
Так же можно сослаться на права другого свойства или метода или даже другого сабжа.
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
// наборчик №1
$conf['rule'][1][1]['title']  = 'все посетители';
$conf['rule'][1][1]['val']    = 'all';

$conf['rule'][1][2]['title']  = 'участники группы';
$conf['rule'][1][2]['val']    = '%member%';

$conf['rule'][1][3]['title']  = 'автор сабжа, владелец ресурса';
$conf['rule'][1][3]['val']    = '%author%,%own%';

$conf['rule'][1][4]['title']  = 'администратор';
$conf['rule'][1][4]['val']    = '%own%.admin';



То есть, через свойства частично можно решать задачи бизнес-логики.
Например, свойством некого проекта может быть список созданных в нём альбомов:

Код: php
1.
2.
3.
4.
5.
6.
// добавляем свойство
$this->addField(array(
      'name' => 'album',
      'title' => 'Альбомы проекта',
      'depth' => '3', // редкое свойство
      'access' => 'r:member;)); // права на действия со свойством



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

Код: php
1.
2.
3.
4.
5.
// # - вызов коллекции 
s('#.comm'); // вернёт дефолтное количество комментариев текущего сабжа, если они есть
s('//.pro_222.#.post', 'lim:0,10'); // вернёт 10 первых постов для проекта №222
s('//.album_p1_1.#.img', 
  'lim:0,3;sort:id,desc;tpl:mini'); // вернёт 3 последних картинки используя шаблон "mini"



Иерархия сабжей и их родственные связи задаются в конфиге.
Код: php
1.
2.
3.
4.
5.
6.
$conf['child']['pro']   = 'post,wall,cat,order,tag,album,img,pro,event,task,contact,group,app';
$conf['child']['user']   = 'pro,wall,post,tag,task,album,img,group,prof,contact,app,comm';
$conf['child']['album'] = 'img,comm,tag';
$conf['child']['post']  = 'comm,cat,tag';
$conf['child']['img']   = 'comm,ico,tag';
$conf['child']['wall']   = 'comm';



Но вопросов по бизнес-логике у меня много, так что кооперация возможна.
Единственное - хотелось бы заняться рефакторингом после того, как будет сформирована команда.
...
Рейтинг: 0 / 0
[StartUp] новый php FrameWork - приглашаю к разработке
    #38182115
ArteNonMarte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и ещё:

Сабжи управляются двумя классами, работающими в паре: Класс Action и его статичный брат act
(имя Action было взято по традиции. В следующей версии фреймворка Action будет заменено на Subj, как наиболее подходящее по сути)

Все сабжи наследуются от Action. Класс act осуществляет роутинг и непосредственно раздаёт сабжи по запросу.

Важный момент: при вызове сабжа объект создаётся единожды. То есть, если мы запросим два десятка картинок, будет создан только один экземпляр класса Action_img, а не 20. Картинки будут храниться в массиве объекта act
Код: php
1.
2.
self::$aSubj['img']; // сабжи
self::$oSubj['img']; // экземпляр класса сабжа



Когда мы запрашиваем сабж, то он отдаётся из этого массива (после проверки прав, разумеется). Если его там нет, то он загружается. Точнее, берутся его свойства из кэша. Точнее, "популярные" свойства, у которых глубина запроса (depth) равна 1. Редкие свойства запрашиваются отдельно, что не происходит при вызове коллекции, а лишь при вызове конкретного сабжа, что позволяет регулировать нагрузку.

То есть, у сабжа может быть 10, 100 или даже 1000 разнообразных свойств, но это не значит, что их нужно непременно загружать по первому требованию. То же и с методами (динамическая загрузка методов описана многократно).
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / [StartUp] новый php FrameWork - приглашаю к разработке
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]