mirror of
https://github.com/silverstripe/silverstripe-cms
synced 2024-10-22 08:05:56 +02:00
API Enable tree filter highlighting
Decoupling of CMS / Framework
This commit is contained in:
parent
f4f226927d
commit
c5e0c8f007
@ -13,7 +13,7 @@
|
|||||||
* @package cms
|
* @package cms
|
||||||
* @subpackage content
|
* @subpackage content
|
||||||
*/
|
*/
|
||||||
abstract class CMSSiteTreeFilter extends Object {
|
abstract class CMSSiteTreeFilter extends Object implements LeftAndMain_SearchFilter {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Array Search parameters, mostly properties on {@link SiteTree}.
|
* @var Array Search parameters, mostly properties on {@link SiteTree}.
|
||||||
@ -22,9 +22,21 @@ abstract class CMSSiteTreeFilter extends Object {
|
|||||||
protected $params = array();
|
protected $params = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Array
|
* List of filtered items and all their parents
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $_cache_ids = null;
|
protected $_cache_ids = null;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Subset of $_cache_ids which include only items that appear directly in search results.
|
||||||
|
* When highlighting these, item IDs in this subset should be visually distinguished from
|
||||||
|
* others in the complete set.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $_cache_highlight_ids = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Array
|
* @var Array
|
||||||
@ -75,22 +87,25 @@ abstract class CMSSiteTreeFilter extends Object {
|
|||||||
parent::__construct();
|
parent::__construct();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Method on {@link Hierarchy} objects which is used to traverse into children relationships.
|
|
||||||
*
|
|
||||||
* @return String
|
|
||||||
*/
|
|
||||||
public function getChildrenMethod() {
|
public function getChildrenMethod() {
|
||||||
return $this->childrenMethod;
|
return $this->childrenMethod;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Method on {@link Hierarchy} objects which is used find the number of children for a parent page
|
|
||||||
*/
|
|
||||||
public function getNumChildrenMethod() {
|
public function getNumChildrenMethod() {
|
||||||
return $this->numChildrenMethod;
|
return $this->numChildrenMethod;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getPageClasses($page) {
|
||||||
|
if($this->_cache_ids === NULL) {
|
||||||
|
$this->populateIDs();
|
||||||
|
}
|
||||||
|
|
||||||
|
// If directly selected via filter, apply highlighting
|
||||||
|
if(!empty($this->_cache_highlight_ids[$page->ID])) {
|
||||||
|
return 'filtered-item';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the list of filtered pages
|
* Gets the list of filtered pages
|
||||||
*
|
*
|
||||||
@ -113,6 +128,7 @@ abstract class CMSSiteTreeFilter extends Object {
|
|||||||
protected function populateIDs() {
|
protected function populateIDs() {
|
||||||
$parents = array();
|
$parents = array();
|
||||||
$this->_cache_ids = array();
|
$this->_cache_ids = array();
|
||||||
|
$this->_cache_highlight_ids = array();
|
||||||
|
|
||||||
if($pages = $this->pagesIncluded()) {
|
if($pages = $this->pagesIncluded()) {
|
||||||
|
|
||||||
@ -121,6 +137,7 @@ abstract class CMSSiteTreeFilter extends Object {
|
|||||||
foreach($pages as $pageArr) {
|
foreach($pages as $pageArr) {
|
||||||
$parents[$pageArr['ParentID']] = true;
|
$parents[$pageArr['ParentID']] = true;
|
||||||
$this->_cache_ids[$pageArr['ID']] = true;
|
$this->_cache_ids[$pageArr['ID']] = true;
|
||||||
|
$this->_cache_highlight_ids[$pageArr['ID']] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
while(!empty($parents)) {
|
while(!empty($parents)) {
|
||||||
@ -136,17 +153,12 @@ abstract class CMSSiteTreeFilter extends Object {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns TRUE if the given page should be included in the tree.
|
|
||||||
* Caution: Does NOT check view permissions on the page.
|
|
||||||
*
|
|
||||||
* @param SiteTree $page
|
|
||||||
* @return Boolean
|
|
||||||
*/
|
|
||||||
public function isPageIncluded($page) {
|
public function isPageIncluded($page) {
|
||||||
if($this->_cache_ids === NULL) $this->populateIDs();
|
if($this->_cache_ids === NULL) {
|
||||||
|
$this->populateIDs();
|
||||||
|
}
|
||||||
|
|
||||||
return (isset($this->_cache_ids[$page->ID]) && $this->_cache_ids[$page->ID]);
|
return !empty($this->_cache_ids[$page->ID]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -19,7 +19,18 @@ $ExtraTreeTools
|
|||||||
</div>
|
</div>
|
||||||
<% end_if %>
|
<% end_if %>
|
||||||
|
|
||||||
<div class="cms-tree" data-url-tree="$LinkWithSearch($Link(getsubtree))" data-url-savetreenode="$Link(savetreenode)" data-url-updatetreenodes="$Link(updatetreenodes)" data-url-addpage="{$LinkPageAdd('AddForm/?action_doAdd=1', 'ParentID=%s&PageType=%s')}" data-url-editpage="$LinkPageEdit('%s')" data-url-duplicate="{$Link('duplicate/%s')}" data-url-duplicatewithchildren="{$Link('duplicatewithchildren/%s')}" data-url-listview="{$Link('?view=list')}" data-hints="$SiteTreeHints.XML" data-childfilter="$Link('childfilter')" data-extra-params="SecurityID=$SecurityID">
|
<div class="cms-tree <% if $TreeIsFiltered %>filtered-list<% end_if %>"
|
||||||
|
data-url-tree="$LinkWithSearch($Link(getsubtree))"
|
||||||
|
data-url-savetreenode="$Link(savetreenode)"
|
||||||
|
data-url-updatetreenodes="$Link(updatetreenodes)"
|
||||||
|
data-url-addpage="{$LinkPageAdd('AddForm/?action_doAdd=1', 'ParentID=%s&PageType=%s')}"
|
||||||
|
data-url-editpage="$LinkPageEdit('%s')"
|
||||||
|
data-url-duplicate="{$Link('duplicate/%s')}"
|
||||||
|
data-url-duplicatewithchildren="{$Link('duplicatewithchildren/%s')}"
|
||||||
|
data-url-listview="{$Link('?view=list')}"
|
||||||
|
data-hints="$SiteTreeHints.XML"
|
||||||
|
data-childfilter="$Link('childfilter')"
|
||||||
|
data-extra-params="SecurityID=$SecurityID">
|
||||||
$SiteTreeAsUL
|
$SiteTreeAsUL
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user