1
0
mirror of https://github.com/processwire/processwire.git synced 2025-08-20 13:31:48 +02:00

Add support for a $page->getPageListLabel(); method which enables custom page classes to return custom markup for the page's label in the page-list.

This commit is contained in:
Ryan Cramer
2022-09-30 12:01:46 -04:00
parent 127ef175b7
commit 5d86dc8dec
3 changed files with 45 additions and 15 deletions

View File

@@ -60,9 +60,11 @@
padding-bottom: 3px;
line-height: 1em;
}
/*
.PageListItem > a span + span:before {
content: ', ';
}
*/
/**
* Style for the children label and notes

View File

@@ -300,8 +300,13 @@ abstract class ProcessPageListRender extends Wire {
public function ___getPageLabel(Page $page, array $options = array()) {
$sanitizer = $this->wire()->sanitizer;
if(strpos($this->pageLabelField, '!') === 0) {
$formatLabel = true;
$label = $page->getPageListLabel();
if(!empty($label)) {
// label from custom page class overrides others
$formatLabel = false;
} else if(strpos($this->pageLabelField, '!') === 0) {
// exclamation forces this one to be used, rather than template-specific one
$label = trim(ltrim($this->pageLabelField, '!'));
} else {
@@ -317,20 +322,24 @@ abstract class ProcessPageListRender extends Wire {
if(!empty($options['noIcon'])) $icon = '';
while(strpos($label, ' ') !== false) $label = str_replace(' ', ' ', $label);
$bracket1 = strpos($label, '{');
if($bracket1 !== false && $bracket1 < strpos($label, '}')) {
// predefined format string
// adjust string so that it'll work on a single line, without the markup in it
$value = $page->getText($label, true, true); // oneLine=true, entities=true
} else {
// space delimited list of fields
$value = $this->getPageLabelDelimited($page, $label, $options);
}
if($formatLabel) {
$bracket1 = strpos($label, '{');
if(!strlen($value)) {
$value = $sanitizer->entities($page->getUnformatted("title|name"));
if($bracket1 !== false && $bracket1 < strpos($label, '}')) {
// predefined format string
// adjust string so that it'll work on a single line, without the markup in it
$value = $page->getText($label, true, true); // oneLine=true, entities=true
} else {
// space delimited list of fields
$value = $this->getPageLabelDelimited($page, $label, $options);
}
if(!strlen($value)) {
$value = $sanitizer->entities($page->getUnformatted("title|name"));
}
} else {
$value = $label;
}
if(!empty($options['noTags']) && strpos($value, '<') !== false) {