mirror of
https://github.com/processwire/processwire.git
synced 2025-08-17 20:11:46 +02:00
Some code adjustments in ProcessPageList to support a separate renderReady() method, as well as some tweaks per @EntitySelf evernote document
This commit is contained in:
@@ -804,7 +804,7 @@ class ProcessWire extends Wire {
|
|||||||
unset($sf, $f, $x);
|
unset($sf, $f, $x);
|
||||||
|
|
||||||
// when internal is true, we are not being called by an external script
|
// when internal is true, we are not being called by an external script
|
||||||
$cfg['internal'] = $realIndexFile == $realScriptFile;
|
$cfg['internal'] = strtolower($realIndexFile) == strtolower($realScriptFile);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// when included from another app or command line script
|
// when included from another app or command line script
|
||||||
|
@@ -91,7 +91,7 @@ class WireDebugInfo extends Wire {
|
|||||||
* @return array
|
* @return array
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
protected function Page(Page $page) {
|
public function Page(Page $page) {
|
||||||
|
|
||||||
$info = array(
|
$info = array(
|
||||||
'instanceID' => $page->instanceID,
|
'instanceID' => $page->instanceID,
|
||||||
|
@@ -171,7 +171,7 @@ class FieldtypeCache extends Fieldtype {
|
|||||||
$select->label = 'Fields to cache';
|
$select->label = 'Fields to cache';
|
||||||
$select->description = 'Select all fields that you would like to be cached.';
|
$select->description = 'Select all fields that you would like to be cached.';
|
||||||
$select->notes =
|
$select->notes =
|
||||||
"If you don't have 'autojoin' checked under this field's advanced settings, the you will have to " .
|
"If you don't have 'autojoin' checked under this field's advanced settings, then you will have to " .
|
||||||
"call \$page->{$field->name} before the cached fields will be loaded.";
|
"call \$page->{$field->name} before the cached fields will be loaded.";
|
||||||
|
|
||||||
foreach($this->fields as $f) {
|
foreach($this->fields as $f) {
|
||||||
|
@@ -773,7 +773,8 @@ class InputfieldFile extends Inputfield implements InputfieldItemList, Inputfiel
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected function ___processInputDeleteFile(Pagefile $pagefile) {
|
protected function ___processInputDeleteFile(Pagefile $pagefile) {
|
||||||
$this->message($this->_("Deleted file:") . " $pagefile"); // Label that precedes a deleted filename
|
$fileLabel = $this->wire('config')->debug ? $pagefile->url() : $pagefile->name;
|
||||||
|
$this->message($this->_("Deleted file:") . " $fileLabel"); // Label that precedes a deleted filename
|
||||||
$this->value->delete($pagefile);
|
$this->value->delete($pagefile);
|
||||||
$this->trackChange('value');
|
$this->trackChange('value');
|
||||||
}
|
}
|
||||||
|
@@ -42,6 +42,7 @@ class InputfieldPageListSelect extends Inputfield implements InputfieldPageListS
|
|||||||
/** @var ProcessPageList $process */
|
/** @var ProcessPageList $process */
|
||||||
$process = $this->wire('modules')->get('ProcessPageList'); // prerequisite module
|
$process = $this->wire('modules')->get('ProcessPageList'); // prerequisite module
|
||||||
$process->setPageLabelField($this->attr('name'), $this->labelFieldName);
|
$process->setPageLabelField($this->attr('name'), $this->labelFieldName);
|
||||||
|
$process->renderReady();
|
||||||
}
|
}
|
||||||
return parent::renderReady($parent, $renderValueMode);
|
return parent::renderReady($parent, $renderValueMode);
|
||||||
}
|
}
|
||||||
|
@@ -64,6 +64,7 @@ class InputfieldPageListSelectMultiple extends Inputfield
|
|||||||
/** @var ProcessPageList $process */
|
/** @var ProcessPageList $process */
|
||||||
$process = $this->wire('modules')->get('ProcessPageList'); // prerequisite module
|
$process = $this->wire('modules')->get('ProcessPageList'); // prerequisite module
|
||||||
$process->setPageLabelField($this->attr('name'), $this->labelFieldName);
|
$process->setPageLabelField($this->attr('name'), $this->labelFieldName);
|
||||||
|
$process->renderReady();
|
||||||
}
|
}
|
||||||
return parent::renderReady($parent, $renderValueMode);
|
return parent::renderReady($parent, $renderValueMode);
|
||||||
}
|
}
|
||||||
|
@@ -140,6 +140,10 @@ $(document).ready(function() {
|
|||||||
var ignoreClicks = false;
|
var ignoreClicks = false;
|
||||||
|
|
||||||
var isModal = $("body").hasClass("modal") || $("body").hasClass("pw-iframe");
|
var isModal = $("body").hasClass("modal") || $("body").hasClass("pw-iframe");
|
||||||
|
|
||||||
|
if(typeof ProcessWire.config.ProcessPageList != "undefined") {
|
||||||
|
$.extend(options, ProcessWire.config.ProcessPageList);
|
||||||
|
}
|
||||||
|
|
||||||
$.extend(options, customOptions);
|
$.extend(options, customOptions);
|
||||||
|
|
||||||
|
File diff suppressed because one or more lines are too long
@@ -212,70 +212,97 @@ class ProcessPageList extends Process implements ConfigurableModule {
|
|||||||
protected function render() {
|
protected function render() {
|
||||||
|
|
||||||
$this->setupBreadcrumbs();
|
$this->setupBreadcrumbs();
|
||||||
if($this->render) return $this->getPageListRender($this->page)->render();
|
|
||||||
|
if($this->render) {
|
||||||
|
return $this->getPageListRender($this->page)->render();
|
||||||
|
}
|
||||||
|
|
||||||
|
$session = $this->wire('session');
|
||||||
|
$input = $this->wire('input');
|
||||||
|
$isAjax = $this->wire('config')->ajax;
|
||||||
|
$tokenName = $session->CSRF->getTokenName();
|
||||||
|
$tokenValue = $session->CSRF->getTokenValue();
|
||||||
|
$class = $this->id ? "PageListContainerPage" : "PageListContainerRoot";
|
||||||
|
$script = '';
|
||||||
|
|
||||||
|
$this->renderReady();
|
||||||
|
|
||||||
|
if($isAjax && $input->get('renderInputfieldAjax')) {
|
||||||
|
$script = "<script>ProcessPageListInit();</script>";
|
||||||
|
}
|
||||||
|
|
||||||
|
return "\n" .
|
||||||
|
"<div id='PageListContainer' " .
|
||||||
|
"class='$class' " .
|
||||||
|
"data-token-name='$tokenName' " . // CSRF tokens
|
||||||
|
"data-token-value='$tokenValue'>" .
|
||||||
|
"</div>$script";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setup for render
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function renderReady() {
|
||||||
|
|
||||||
$input = $this->wire('input');
|
$input = $this->wire('input');
|
||||||
$config = $this->wire('config');
|
$config = $this->wire('config');
|
||||||
$session = $this->wire('session');
|
|
||||||
$urls = $config->urls;
|
$urls = $config->urls;
|
||||||
$isAjax = $config->ajax;
|
$isAjax = $config->ajax;
|
||||||
$openPageIDs = array();
|
$openPageIDs = array();
|
||||||
$openPageData = array();
|
$openPageData = array();
|
||||||
$script = '';
|
|
||||||
|
if($this->openPage) {
|
||||||
if($this->openPage->id > 1) {
|
if($this->openPage->id > 1) {
|
||||||
$openPageIDs[] = $this->openPage->id;
|
$openPageIDs[] = $this->openPage->id;
|
||||||
foreach($this->openPage->parents() as $parent) {
|
foreach($this->openPage->parents() as $parent) {
|
||||||
if($parent->id > 1 && $parent->id != $this->id) $openPageIDs[] = $parent->id;
|
if($parent->id > 1 && $parent->id != $this->id) $openPageIDs[] = $parent->id;
|
||||||
}
|
}
|
||||||
} else if(!$isAjax && $this->wire('page')->process == $this) {
|
} else if(!$isAjax && $this->wire('page')->process == $this) {
|
||||||
if($this->id) {
|
if($this->id) {
|
||||||
// leave openPageIDs as empty array
|
// leave openPageIDs as empty array
|
||||||
} else {
|
} else {
|
||||||
$openPageIDs = $input->cookie->array('pagelist_open');
|
$openPageIDs = $input->cookie->array('pagelist_open');
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($isAjax) {
|
|
||||||
if($input->get('renderInputfieldAjax')) {
|
|
||||||
$script = "<script>ProcessPageListInit();</script>";
|
|
||||||
}
|
|
||||||
} else if(count($openPageIDs)) {
|
|
||||||
$render = $this->render;
|
|
||||||
$this->render = 'JSON';
|
|
||||||
foreach($openPageIDs as $key => $openPageID) {
|
|
||||||
if(strpos($openPageID, '-')) {
|
|
||||||
list($openPageID, $openPageStart) = explode('-', $openPageID);
|
|
||||||
$openPageStart = (int) $openPageStart;
|
|
||||||
} else {
|
|
||||||
$openPageStart = 0;
|
|
||||||
}
|
}
|
||||||
$openPageID = (int) $openPageID;
|
|
||||||
$openPageIDs[$key] = "$openPageID-$openPageStart";
|
|
||||||
$p = $this->wire('pages')->get($openPageID);
|
|
||||||
if(!$p->id || !$p->listable()) continue;
|
|
||||||
$renderer = $this->getPageListRender($p, $this->limit, $openPageStart);
|
|
||||||
$openPageData["$openPageID-$openPageStart"] = $renderer->setOption('getArray', true)->render();
|
|
||||||
}
|
}
|
||||||
$this->render = $render;
|
|
||||||
|
if(!$isAjax && count($openPageIDs)) {
|
||||||
|
$render = $this->render;
|
||||||
|
$this->render = 'JSON';
|
||||||
|
foreach($openPageIDs as $key => $openPageID) {
|
||||||
|
if(strpos($openPageID, '-')) {
|
||||||
|
list($openPageID, $openPageStart) = explode('-', $openPageID);
|
||||||
|
$openPageStart = (int) $openPageStart;
|
||||||
|
} else {
|
||||||
|
$openPageStart = 0;
|
||||||
|
}
|
||||||
|
$openPageID = (int) $openPageID;
|
||||||
|
$openPageIDs[$key] = "$openPageID-$openPageStart";
|
||||||
|
$p = $this->wire('pages')->get($openPageID);
|
||||||
|
if(!$p->id || !$p->listable()) continue;
|
||||||
|
$renderer = $this->getPageListRender($p, $this->limit, $openPageStart);
|
||||||
|
$openPageData["$openPageID-$openPageStart"] = $renderer->setOption('getArray', true)->render();
|
||||||
|
}
|
||||||
|
$this->render = $render;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$defaults = array(
|
$defaults = array(
|
||||||
'containerID' => 'PageListContainer',
|
'containerID' => 'PageListContainer',
|
||||||
'ajaxURL' => $urls->admin . "page/list/",
|
'ajaxURL' => $urls->admin . "page/list/",
|
||||||
'ajaxMoveURL' => $urls->admin . "page/sort/",
|
'ajaxMoveURL' => $urls->admin . "page/sort/",
|
||||||
'rootPageID' => $this->id,
|
'rootPageID' => $this->id,
|
||||||
'openPageIDs' => $openPageIDs,
|
'openPageIDs' => $openPageIDs,
|
||||||
'openPageData' => $openPageData,
|
'openPageData' => $openPageData,
|
||||||
'openPagination' => (int) $input->get('n'),
|
'openPagination' => (int) $input->get('n'),
|
||||||
'paginationClass' => 'PageListPagination',
|
'paginationClass' => 'PageListPagination',
|
||||||
'showRootPage' => $this->showRootPage ? true : false,
|
'showRootPage' => $this->showRootPage ? true : false,
|
||||||
'limit' => $this->limit,
|
'limit' => $this->limit,
|
||||||
'start' => $this->start,
|
'start' => $this->start,
|
||||||
'speed' => ($this->speed !== null ? (int) $this->speed : self::defaultSpeed),
|
'speed' => ($this->speed !== null ? (int) $this->speed : self::defaultSpeed),
|
||||||
'useHoverActions' => $this->useHoverActions ? true : false,
|
'useHoverActions' => $this->useHoverActions ? true : false,
|
||||||
'hoverActionDelay' => (int) $this->hoverActionDelay,
|
'hoverActionDelay' => (int) $this->hoverActionDelay,
|
||||||
'hoverActionFade' => (int) $this->hoverActionFade,
|
'hoverActionFade' => (int) $this->hoverActionFade,
|
||||||
'selectStartLabel' => $this->_('Change'), // Change a page selection
|
'selectStartLabel' => $this->_('Change'), // Change a page selection
|
||||||
'selectCancelLabel' => $this->_('Cancel'), // Cancel a page selection
|
'selectCancelLabel' => $this->_('Cancel'), // Cancel a page selection
|
||||||
'selectSelectLabel' => $this->_('Select'), // Select a page
|
'selectSelectLabel' => $this->_('Select'), // Select a page
|
||||||
@@ -285,21 +312,10 @@ class ProcessPageList extends Process implements ConfigurableModule {
|
|||||||
'trashLabel' => $this->trashLabel,
|
'trashLabel' => $this->trashLabel,
|
||||||
'ajaxNetworkError' => $this->_('Network error, please try again later'), // Network error during AJAX request
|
'ajaxNetworkError' => $this->_('Network error, please try again later'), // Network error during AJAX request
|
||||||
'ajaxUnknownError' => $this->_('Unknown error, please try again later'), // Unknown error during AJAX request
|
'ajaxUnknownError' => $this->_('Unknown error, please try again later'), // Unknown error during AJAX request
|
||||||
);
|
);
|
||||||
$settings = $config->ProcessPageList;
|
$settings = $config->ProcessPageList;
|
||||||
$settings = is_array($settings) ? array_merge($defaults, $settings) : $defaults;
|
$settings = is_array($settings) ? array_merge($defaults, $settings) : $defaults;
|
||||||
$config->js('ProcessPageList', $settings);
|
$config->js('ProcessPageList', $settings);
|
||||||
|
|
||||||
$tokenName = $session->CSRF->getTokenName();
|
|
||||||
$tokenValue = $session->CSRF->getTokenValue();
|
|
||||||
$class = $this->id ? "PageListContainerPage" : "PageListContainerRoot";
|
|
||||||
|
|
||||||
return "\n" .
|
|
||||||
"<div id='PageListContainer' " .
|
|
||||||
"class='$class' " .
|
|
||||||
"data-token-name='$tokenName' " . // CSRF tokens
|
|
||||||
"data-token-value='$tokenValue'>" .
|
|
||||||
"</div>$script";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user