artabro/wire/modules/Markup/MarkupPageFields.module

127 lines
3.4 KiB
Text
Raw Permalink Normal View History

2024-08-27 11:35:37 +02:00
<?php namespace ProcessWire;
/**
* ProcessWire PageRenderFields Module
*
* Adds $page->renderFields() and $page->images->render() methods
* that return basic markup for output during development and debugging.
* It hooks into all instances of the the Page and Pageimages classes.
*
* ProcessWire 3.x, Copyright 2016 by Ryan Cramer
* https://processwire.com
*
*
*/
class MarkupPageFields extends WireData implements Module {
public static function getModuleInfo() {
return array(
'title' => 'Markup Page Fields',
'version' => 100,
'summary' =>
'Adds $page->renderFields() and $page->images->render() methods ' .
'that return basic markup for output during development and debugging.',
'permanent' => true,
'singular' => true,
'autoload' => true,
);
}
/**
* Initialize the hooks
*
*/
public function init() {
$this->addHook('Page::renderFields', $this, 'renderPageFields');
$this->addHook('Pageimages::render', $this, 'renderPageImages');
}
/**
* Return a string with the rendered output of a FieldtypeImages field
*
* Example, assuming you have a FieldtypeImage field called 'images' on your page:
* echo $page->images->render();
* Renders a unordered list of the images.
*
* This is intended primarily as a handy tool when debugging or during development.
*
* @return string rendered markup
*
*/
public function renderPageImages($event) {
$images = $event->object;
$out = "\n<ul class='PageImages'>";
foreach($images as $image) {
$out .= "\n\t<li><img src='{$image->url}' alt='{$image->description}' /></li>";
}
$out .= "\n</ul>";
$event->return = $out;
}
/**
* Return a string with the rendered output of this Page's Fields as markup in a definition list.
*
* This is intended primarily as a handy tool when debugging or during development.
*
* @return string rendered markup
*
*/
public function renderPageFields($event) {
$options = array(
'exclude' => array(), // array of field names to exclude
'labels' => array(), // optional labels to replace field labels, indexed by field name
);
$page = $event->object;
if(!count($page->fields)) return '';
$cnt = 0;
if(isset($event->arguments[0]) && is_array($event->arguments[0])) {
$options = array_merge($options, $event->arguments[0]);
}
$yes = $this->_('Yes');
$no = $this->_('No');
foreach($page->fields as $field) {
if(in_array($field->name, $options['exclude'])) continue;
if($field->type instanceof FieldtypeFieldsetClose) continue;
$label = $field->label;
if(isset($options['labels'][$field->name])) $label = $options['labels'][$field->name];
if($field->type instanceof FieldtypeFieldsetOpen) {
$out .= "\n<h2>{$label}</h2>";
continue;
} else if(!$cnt) {
$out = "\n<dl class='PageFields'>";
}
$value = $page->get($field->name);
if($field->type instanceof FieldtypeCheckbox) $value = $value ? $yes : $no;
else if($value instanceof Pageimages) $value = $value->render();
if(is_object($value)) {
if($value instanceof PageArray) {
$value = $value->render();
} else if($value instanceof Page) {
if($value->viewable()) $value = "<a href='{$value->url}'>{$value->title}</a>";
else $value = $value->title;
}
}
$out .= "\n\n\t<dt>{$label}</dt>" .
"\n\t<dd>$value</dd>";
$cnt++;
}
$out .= "\n</dl><!--/.renderPageFields-->";
$event->return = $out;
}
}