Bootstrap.php php библиотека для создания элементов Bootstap в php коде, нужна или нет

ChAk

Новичок
Идея

Работая над админкой своего проекта (админка делается на Bootstrap) обнаружил, что мне очень не хватает возможности прямо из php формировать содержание элементов Bootstap. Например:

1. Наполнять содержания выпадающих списков меня в зависимости от прав пользователя.

2. Наполнять навигационный бар элементами в зависимости от многих факторов, он у меня используется для профайлинга.

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

... и множество других вещей, так же хотелось формировать прямо в php коде, а не в шаблоне.

Осознав это я начал создавать фактически отдельную библиотеку, которую условно назвал Bootsrap.php. Когда были созданы кнопка, выпадающее меня, хлебные крошки, pager, появилась идея выложить наработки на гитхаб.

Аналоги

Поиски аналогов навели только на http://www.cniska.net/yii-bootstrap/, но эта библиотека мне не понравилась, во-первых привязка к yii, который я не использую, во-вторых конфигурирование элементов с помощью массива, что я не приемлю и о чем напишу ниже.

Как я вижу должна выглядеть подобная библиотека?

1. Главное! Кодкомплит должен избавить от необходимости каждый раз смотреть в документацию Bootstap. Как это, будет видно из примеров.
2. Для создания элементов должна использовать цепочка вызовов аля jQuery, а не массивы. Это напрямую связано с предыдущим пунктом.
3. Библиотека должна быть максимально просто в использовании, в идеале что бы не нужно было читать документации и смотреть примеров использования, должно быть достаточно базовых знаний, что может Bootstrap. Опять же все благодаря кодкомплиту и phpdocs.
4. Не смотря на перечисленное у библиотеки должна быть и хорошая документация и примеры.
5. Разумеется не должно быть привязано к какому-то конкретному фреймворку

Примеры
PHP:
use \BootstrapPhp\Button;
use \BootstrapPhp\Icon;
use \BootstrapPhp\DropdownMenu;

// Простое создание кнопки
$button = new Button('Удалить все', $url);

// Добавляем разные свойства (все не обязатено)
$button
    ->setIcon(Icon::TRASH)
    ->setType(Button::TYPE_SUCCESS)
    ->setTag(Button::TAG_BUTTON)
    ->makeToggle()
    ->setLoadingText('Loading ...');

// Добавляем кнопку выпадающий список
$dropdown_menu = new DropdownMenu();
$dropdown_menu
    ->... // заполняем меню
$button->addDropdownMenu($dropdown_menu);

// Добавление html атрибутов не связанных с Bootstrap, если нужно
$button
    ->setId('myButton')
    ->setClass('delete_all')
    ->addDataAttribute('data_name_1', 'data_value_1')
    ->addDataAttribute('data_name_n', 'data_value_n');
На примере тяжело увидеть все прелести такого подхода. Как я писал выше главное удобство это кодкомплит в IDE (у меня PHPStorm, но проверю чтобы все работало и в других IDE). Кроме того что кодкомплит по названию методов подсказывает вам какие возможности у вас есть, так еще каждый метод снабжен phpdoc'ом где не только описано его предназначение, но и предназначение каждого атрибута и его тип. Кроме банальных string и bool, есть типы вроде использовано нами выше DropdownMenu, что однозначно вам скажет, что методу кнопки addDropdownMenu() нужно скормить именно объект выпадающего списка.

Проблемы

1. Главная! У меня плохо с английский, поэтому все будет на русском и phpdocs и документация. Конечно же в идеале должно быть еще на английском, но так будет только если кто-то возьмется и переведет, либо может быть жену придется привлечь.

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

Вопросы

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

Absinthe

жожо
Почему ты считаешь, что писать html кодом лучше, чем просто писать html?
Более того, где будет лежать этот код, если у меня шаблонизатор twig (к примеру):
PHP:
$button
    ->setId('myButton')
    ->setClass('delete_all')
Будешь в контроллер засовывать?
 

ChAk

Новичок
Почему ты считаешь, что писать html кодом лучше, чем просто писать html?
Наверное ты имел ввиду почему php код лучше чем html. Во-первых, если писать быстрее и легче по причинам которые о обозначил, во-вторых его легче сопровождать если что то меняется, в этом я уже успел убедиться, так как я уже начал использовать то что написано у себя, в третьих если в бутстрапе что то измениться будет легче внедрить эти изменения в проект так как достаточно будет поправить шаблоны.

Более того, где будет лежать этот код, если у меня шаблонизатор twig (к примеру):
PHP:
$button
    ->setId('myButton')
    ->setClass('delete_all')
Будешь в контроллер засовывать?
В контролеер или модель или в шаблон сам решай я не знаю как у тебя устроено, у меня это в основном в моделях для шаблонов, это у меня такой особый вид моделей. Забыл написать что получить готовый html можно двумя способами вызовам метода toHtml(), либо просто приведением объекта к string (может __toString)
То что можно добавлять html атрибуты это бонус, можно не использовать если не нужно. Мне это нужно для создания на основе bootstrap элементов более высокоуровневых собственных элементов.
 

Absinthe

жожо
Во-первых, если писать быстрее и легче по причинам которые о обозначил
В первом случае (PHP-хелпер) это делаешь ты, во втором - верстальщик. Естественно второй способ проще.
Более того, верстальщику придеncя править не только шаблоны, но и код, что усложняет ему работу.

В контролеер или модель или в шаблон сам решай я не знаю как у тебя устроено
А в моем случае (классический MVC, где V через twig) куда это вставлять?
 

ChAk

Новичок
В первом случае (PHP-хелпер) это делаешь ты, во втором - верстальщик. Естественно второй способ проще.
Более того, верстальщику придеncя править не только шаблоны, но и код, что усложняет ему работу.
У меня нет верстальщика я все делаю сам, поэтому как быть в случае с отдельным верстальщиком не буду советовать.

А в моем случае (классический MVC, где V через twig) куда это вставлять?
У меня шаблоны на php. Тебя можно в модель. Я порой вставляю и в шаблон прямо если это просто кнопка почему бы нет. Очевидно тебе нужно ответить на вопрос где бы ты формировал, что будет в меню пользователя, или в панели инструментов или где либо еще состав чего не постоянен и там формировать. Если у тебя такая сложная логика прямо в twig шаблоне, ну тогда наверное не подойдет.
 

Absinthe

жожо
У меня нет верстальщика я все делаю сам, поэтому как быть в случае с отдельным верстальщиком не буду советовать.
Как понимаю, случай с отсутствием верстальщика - это когда программирование используется в виде хобби, а не профессии.

Тебя можно в модель.
Я аж чаем поперхнулся.
Что отображению делать в модели, а не в отображении?
 

ChAk

Новичок
Как понимаю, случай с отсутствием верстальщика - это когда программирование используется в виде хобби, а не профессии.
Зачем же обижать людей. Для меня это основная и единственная работа в течении 10 лет уже.

Я аж чаем поперхнулся.
Что отображению делать в модели, а не в отображении?
Разговор ушел в сторону свелся к любимой теме где что размещать. Решай сам где тебе кажется правильным. Я точно так же удивляюсь когда у людей есть только модель и шаблон, для меня не понятно что куда пихать поэтому у меня всегда есть промежуточная модель между ними.
 

hell0w0rd

Продвинутый новичок
Странная позиция так или иначе. Один из доводов - автодополнение в ide. У шторма уже это для css есть. вводишь class="btn-" и тебе выпадают возможные варианты.
Ну и банально размер:
PHP:
<a href="http://google.com" class="btn btn-success">Google</a>

Link::new()->setHref('http://google.com')->setBtn('success')->setContent('Google')->render();
 

damner2

Новичок
Ну и банально размер:
PHP:
<a href="http://google.com" class="btn btn-success">Google</a>

$link = Link::new()->setHref('http://google.com')->setBtn('success')->setContent('Google');
Ваще-то, как-то не совсем корректно ты сравниваешь. Правильнее было бы сравнивать примерно так:
PHP:
<a href="<?=htmlspecialchars('http://google.com', ENT_COMPAT, 'UTF-8')?>" class="btn btn-success"><?=htmlspecialchars('Google', ENT_COMPAT, 'UTF-8')?></a>

echo Link::new()->setHref('http://google.com')->setBtn('success')->setContent('Google');
 
  • Like
Реакции: WMix

hell0w0rd

Продвинутый новичок
damner2
Ну я если честно забыл про то что надо экранировать, ибо шаблонизатор об этом думает за меня:) И думаю любой, кто юзает php-шаблоны завернул эту колбасу в e() или тому подобное
PHP:
<a href="<?=e('http://google.com')?>" class="btn btn-success"><?e('Google')?></a>
Ну и как автор заметил нужны use условия для комфортного использования этой штуки, так что кол-во кода все еще велико
 

fixxxer

К.О.
Партнер клуба
ChAk
поставь нормальную ide и осиль zen coding/emmet, сразу расхочется извращаться подобным образом :)

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