Многоразовые компоненты для вашего процесса-выборочного образца!
Добро пожаловать в Twack! Twack помогает вам создать хорошо структурированные и обслуживаемые процессоры. Вдохновленный угловым.
| Processwire-Module: | https://modules.processwire.com/modules/twack/ |
| Поддержка-форум: | https://processwire.com/talk/topic/23549-twack/ |
| Репозиторий: | https://github.com/sebiworld/twack |
| Вики: | https://github.com/sebiworld/twack/wiki/ |
Twack может быть установлен, как и любой другой модуль в Processwire. Проверьте следующее руководство для получения подробной информации: как можно установить или удалить модули
Предварительные условия PHP> = 5.5.0 и версия Processwire> = 3.0.0 . Однако это также проверяется во время установки модуля. Нет дальнейших зависимостей.
Twack использует компоненты для подразделения веб -сайта на логические компоненты. Типичный компонент может стоять для себя и не имеет никаких зависимостей, которые делают его многоразовым и простым в обслуживании. Большинство компонентов состоят из контроллера и представления.
Если вы не сделали, создайте каталог site/templates/components . Здесь мы поместим все наши будущие компоненты. Добавьте новый файл hello_world.view.php внутри каталога. Создайте site/templates/services , где все наши занятия по обслуживанию найдут дом.
Откройте файл и заполните следующее содержимое:
<?php
namespace ProcessWire ;
?>
<h2>Hello World!</h2>Это сделано! У нас есть наш первый функционирующий компонент. По общему признанию, компонент состоит только из одного взгляда, но даже для простых компонентов есть много полезных целей. Мы добавим обработку данных и функции через мгновение. Но во-первых, давайте узнаем, как использовать наш компонент в одном из наших обработчиков.
Если бы у нас был класс контроллера для нашего взгляда, класс был бы назван HelloWorld . Подробнее об этом в следующей главе. Чтобы использовать наш компонент в процессоре, мы должны спросить модуль с Twack, и он найдет и инициализирует его для нас.
<?php
namespace ProcessWire ;
// Get a new instance of our HelloWorld-component:
$ myComponent = wire ( ' twack ' )-> getNewComponent ( ' HelloWorld ' );
?>
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<?php
// Render the component`s view:
echo $ myComponent -> render ();
?>
</body>
</html>Как вы видите, в том числе компонент в традиционных обработчиках довольно проста. Вы можете построить полный HTML в wack-views и использовать его полный потенциал, но вам не нужно. Можно постепенно заменить отдельные части страницы.
Давайте вернемся к нашему компоненту. Вы создали свой HelloWorld-Component с только то, что иное мнение, которое выводит смелый «Hello World!». Большинству компонентов нужно больше, чем просто выход. Нам нужен контроллер , чтобы сделать представление более динамичным.
Создайте новый site/templates/components/hello_world/ и перенесите нашу формулировку в этот пункт назначения. Кроме того, создайте файл контроллера с именем hello_world.class.php в этом новом каталоге.
Для правильной функционирования контроллера Twack требуется немного кода шволю. Скопируйте следующий код в свой контроллер ( hello_world.class.php ):
<?php
namespace ProcessWire ;
class HelloWorld extends TwackComponent {
public function __construct ( $ args ) {
parent :: __construct ( $ args );
}
} Каждый контроллер Twack должен расширить наш общий TwackComponent, который привносит в наш контроллер много фоновой функциональности. С parent::__construct($args); Мы позволили родительскому TwackComponent завершить свою общую работу по инициализации до выполнения кода нашего пользовательского компонента.
В нашем конструкторе мы будем определять переменные, добавлять дочерние компоненты и выполнять все логические работы для представления.
Немного более продвинутый контроллер может выглядеть так:
<?php
namespace ProcessWire ;
class HelloWorld extends TwackComponent {
public function __construct ( $ args ) {
parent :: __construct ( $ args );
$ this -> title = ' Hello World! ' ;
if ( isset ( $ args [ ' title ' ])) {
$ this -> title = $ args [ ' title ' ];
}
// Add and initialise a child-component
$ testChildArgs = [
' myTestValue '
];
$ this -> addComponent ( ' TestChild ' , $ testChildArgs );
}
} $this->title будет "Hello World!", пока мы не получаем никакой ценности для $args['title'] из параметра нашего конструктора $args . Если бы мы инициализировали компонент с $twack->getNewComponent('HelloWorld', ['title' => 'My new Title.']); , мы бы установили бы это на это новое значение.
Каждый атрибут контроллера также доступен в представлении, вам не нужно заботиться о передаче значений.
Дочерний компонент может быть добавлен через $this->addComponent() . В нашем примере мы добавляем компонент «TestChild», который должен быть расположен под site/templates/components/hello_world/test_child/test_child.class.php . Twack автоматически смотрит в каталоге текущего компонента для подкаталогов. Указание другого пути также возможно. Я создал массив $testChildArgs чтобы продемонстрировать передачу дополнительных параметров TestChild , которые будут переданы его конструктору.
Наш новый вид может выглядеть так:
<?php
namespace ProcessWire ;
?>
<div class="hello_world_component">
<?php
if (! empty ( $ this -> showTitle )){
echo " <h2> { $ this -> showTitle } </h2> " ;
}
?>
<p>Lorem ipsum</p>
<div class="children_wrapper">
<?php
foreach ( $ this -> childComponents as $ childComponent ) {
echo ( string ) $ childComponent ;
}
?>
</div>
</div> Как вы видите, мы показываем только название, если $this->title имеет значение. Под $this->childComponents у нас есть список всех компонентов, которые были добавлены через $this->addComponent() в контроллере.
Теперь мы создали базовый компонент Twack, и теперь вы общие концепции, как работает Twack. Но у Twack есть гораздо более отличные функции, которые будут устранены и упростит ваш процесс разработки.
lang Param, добавьте много кодов Langugage, которые можно использовать в качестве ярлыкаlang Param, чтобы выбрать язык в мультиланговых средахwire('twack') . (Спасибо @bernhardbaumrock) Мы используем SEMVER для управления версиями. Для доступных версий см. Теги в этом репозитории.
Этот проект лицензирован в соответствии с общедоступной лицензионной версией Mozilla.
➡ Продолжить с 2: соглашения об именах и вариантах компонентов