Component

Module help you to create and use set of components to utilise in your ProcessWire page templates.

Component Module for ProcessWire CMS/CMF

Module will check :

  • site/modules/**/components/*/templates/template.php
  • site/templates/components/*/templates/template.php

directories for the components. If you want to use default params create a component.php file in Component root dir.

Template Components

└── site/templates/components
 └── name-of-component
 ├── component.php (optional)
 ├── layout-default.php (optional)
 ├── layout-home.php (optional)
 ├── layout-contact.php (optional)
 ├── fields.php (optional)
 └── templates
 └── template.php (required)

Module Components

└── site/modules/name-of-module/components
 └── name-of-component
 ├── component.php (optional)
 ├── layout-default.php (optional)
 ├── layout-home.php (optional)
 ├── layout-contact.php (optional)
 ├── fields.php (optional)
 └── templates
 └── template.php (required)

Requirements


  • ProcessWire 3.0 or newer
  • PHP 8.1 or newer

Installation


Install the module from the modules directory

Via Composer:

composer require trk/component

Via git clone:

cd your-processwire-project-folder/
cd site/modules/
git clone https://github.com/trk/Component.git

All component.php file settings

<?php
namespace ProcessWire;
return [
 'title' => 'Title of component',
 'params' => [
 'foo' => '',
 ],
 'params' => [
 ],
 'parent' => [],
 // cache the output
 'cache' => function (array $component): array {
 return [
 'name' => 'name-of-cache',
 'expire' => 'expire-time-of-cache'
 ];
 },
 'metadata' => function (array $params, array $component): void {
 // add some metadata for component
 },
 'defaults' => function (array $params, array $component): array {
 $defaults = [
 'foo' => 'bar'
 ];
 return $defaults;
 },
 'transform' => function (array $params, array $component): array {
 // do something with params
 return $params;
 },
 // 'attrs' => [
 // // add more attrs
 // ],
 'attrs' => function (array $attrs, array $component): array {
 // do something with attrs
 return $attrs;
 },
 'fn' => [
 // add hello method to TemplateFile and use it like $this->hello(); in template
 'hello' => function (HookEvent $e) {
 $e->return = 'Hello World';
 }
 ],
 // Check component has required parameters
 'render' => function(array $params, array $component): bool {
 return count($params);
 },
 // Do something with output
 // 'output' => function(string $output, array $component): bool {
 // return str_replace('<alert />', component('alert', ['content' => 'Warning !']), $output);
 // }
];

Component array output

[
 'name' => 'name-of-component', // string
 'dir' => 'path-of-component', // string
 'templateFile' => 'template-file-of-component', // string
 'componentFile' => null, // optional component configuration file, ?string
 'fieldsFile' => null, // optional fields configuration file, ?string
 'layouts' => [], // optional ready to use layout files, you can overwrite params by passing `layout` array of layout file list
 'title' => 'title-of-component', // string 
 'params' => [], // array
 'parent' => null, // ?array
 'cache' => null, // ?callable
 'metadata' => null, // ?callable
 'defaults' => null, // ?array|callable
 'transform' => null, // ?callable
 'attrs' => null, // ?array|callable
 'fn' => null, // ?array
 'render' => null, // ?callable 
 'output' => null // ?callable
];

Create heading Component Config File not required

// site/templates/components/heading/component.php
<?php
namespace ProcessWire;
return [
 // Set default params
 'params' => [
 'content' => '',
 'tag' => 'h1',
 'size' => '',
 'decoration' => '',
 'transform' => '',
 'color' => '',
 'align' => ''
 ],
 // cache the output
 'cache' => function (array $component): array {
 $params = $component['params'];
 $name = null;
 $expire = null;
 if (isset($params['page']) && $params['page'] instanceof Page) {
 $name = $params['page']->id;
 $expire = $params['page'];
 }
 return [
 'name' => $page->id,
 'expire' => $expire
 ];
 },
 'transform' => function (array $params): array {
 // do something with params
 return $params;
 },
 // 'attrs' => [
 // // add more attrs
 // ],
 'attrs' => function (array $attrs): array {
 // do something with attrs
 return $attrs;
 },
 'fn' => [
 // add hello method to TemplateFile and use it like $this->hello(); in template
 'hello' => function (HookEvent $e) {
 $e->return = 'Hello World';
 }
 ],
 // Check component has required parameters
 'render' => function(array $params): bool {
 return strlen($params['content']) ?: false;
 },
 // Do something with output
 // 'output' => function(string $output): bool {
 // return str_replace('<alert />', component('alert', ['content' => 'Warning !']), $output);
 // }
];

Create heading Template File required

// site/templates/components/heading/templates/template.php
<?php
namespace ProcessWire;
/**
 * @var WireFileTools $files
 * @var string $__name Name of the component
 * @var string $__title Title of component
 * @var string $__dir Directory of component
 * @var string $__template Template file of component
 * @var string $__component Component file of component
 * @var string $__fields Fields file of component
 * @var array $__layouts Layouts of component
 * @var ?array $parent Parent component
 * @var array $params Parameters of component
 * @var array $attrs Attributes of component
 * @var array $children Children of component
 */
if ($params['size']) {
 $attrs['class'][] = "uk-{$params['size']}";
}
if ($params['decoration']) {
 $attrs['class'][] = "uk-{$params['decoration']}";
}
if ($params['transform']) {
 $attrs['class'][] = "uk-text-{$params['transform']}";
}
if ($params['color']) {
 $attrs['class'][] = "uk-text-{$params['transform']}";
}
if ($params['align']) {
 $attrs['class'][] = "uk-text-{$params['align']}";
}
// $this->hello(); added dynamically as function
// $this->attrs(array $attrs); Accept array of attributes, return is string
echo "<{$params['tag']}{$this->attrs($attrs)}>{$params['content']}</{$params['tag']}>";
echo component('heading', [
 'content' => 'Hello World !',
]);

More modules by ukyo (@trk)

  • FieldtypeFontIconPicker

    Module allow you to use Font-Awesome, Ionicons and other icon libraries easily. You can select icons directly from icon select list, also you can set settings for each InputfieldFontIconPicker.
  • WireMail: PHPMailer

    This module extends WireMail base class, integrating the PHPMailer mailing library into ProcessWire.
  • Mystique

    Mystique is a config file based field creation module for ProcessWire CMS/CMF by ALTI VE BIR.
  • Turkish (tr-TR)

    ProcessWire Türkçe Dil Çevirileri
  • Event Loader

    Event Loader module module allow you to load events from event files
  • Validation Module

    Validation Module For ProcessWire
  • Intervention Image Engine

    Replaces PW sizing with Intervention Image + Delayed Rendering using ImageManager logic.
  • Component

    Module help you to create and use set of components to utilise in your ProcessWire page templates.
  • HTMX

    Provides HTMX v2 integration including Component State, Out-of-band swaps, Extensions, and SSE support natively within ProcessWire.

All modules by ukyo (@trk)

Install and use modules at your own risk. Always have a site and database backup before installing new modules.

AltStyle によって変換されたページ (->オリジナル) /