diff --git a/_build/gpm.json b/_build/gpm.json index d7aa3019..670d59b1 100644 --- a/_build/gpm.json +++ b/_build/gpm.json @@ -72,6 +72,11 @@ "value": "selectioncontainer", "namespace": "core" }, + { + "key": "mgr_show_collections_in_grid", + "area": "manager", + "value": "" + }, { "key": "renderer_image_path", "area": "manager", diff --git a/core/components/collections/lexicon/en/default.inc.php b/core/components/collections/lexicon/en/default.inc.php index 90a32962..eef206f4 100644 --- a/core/components/collections/lexicon/en/default.inc.php +++ b/core/components/collections/lexicon/en/default.inc.php @@ -31,6 +31,8 @@ $_lang['setting_collections.tree_tbar_collection_desc'] = 'Show "New Collection" button in Tree tool bar'; $_lang['setting_collections.tree_tbar_selection'] = 'Tree Tool Bar - Selection'; $_lang['setting_collections.tree_tbar_selection_desc'] = 'Show "New Selection" button in Tree tool bar'; +$_lang['setting_collections.mgr_show_collections_in_grid'] = 'Collection templates displayed in grid'; +$_lang['setting_collections.mgr_show_collections_in_grid_desc'] = 'You can specify Collection templates, separated by commas, that will be displayed inside Collection grid.'; // System lexicons diff --git a/core/components/collections/src/Events/OnBeforeDocFormSave.php b/core/components/collections/src/Events/OnBeforeDocFormSave.php index 20ba0e0d..60a826b8 100644 --- a/core/components/collections/src/Events/OnBeforeDocFormSave.php +++ b/core/components/collections/src/Events/OnBeforeDocFormSave.php @@ -22,7 +22,11 @@ public function run() } if ($resource->class_key == CollectionContainer::class) { - $resource->set('show_in_tree', 1); + if (in_array($resource->get('template'), explode(',', $this->modx->getOption('collections.mgr_show_collections_in_grid')))) { + $resource->set('show_in_tree', 0); + } else { + $resource->set('show_in_tree', 1); + } } /** @var modResource $original */ diff --git a/core/components/collections/src/Processors/Resource/GetList.php b/core/components/collections/src/Processors/Resource/GetList.php index c181f3f4..6d108dde 100644 --- a/core/components/collections/src/Processors/Resource/GetList.php +++ b/core/components/collections/src/Processors/Resource/GetList.php @@ -365,10 +365,23 @@ public function prepareQueryBeforeCount(xPDOQuery $c) break; } - $c->where([ - 'class_key:!=' => CollectionContainer::class, -// "NOT EXISTS (SELECT 1 FROM {$this->modx->getTableName('modResource')} r WHERE r.parent = modResource.id)" - ]); + $showCollectionsInGrid = explode(',', $this->modx->getOption('collections.mgr_show_collections_in_grid')); + if (!empty($showCollectionsInGrid)) { + $c->where([ + 'parent' => $parent, + 'AND:template:IN' => $showCollectionsInGrid, + 'AND:class_key:=' => CollectionContainer::class, + ]); + $c->where([ + 'parent' => $parent, + 'AND:class_key:!=' => CollectionContainer::class, + ], xPDOQuery::SQL_OR); + } else { + $c->where([ + 'class_key:!=' => CollectionContainer::class, + // "NOT EXISTS (SELECT 1 FROM {$this->modx->getTableName('modResource')} r WHERE r.parent = modResource.id)" + ]); + } foreach ($this->tvColumns as $column) { $c->leftJoin(modTemplateVarResource::class, '`TemplateVarResources_' . $column['column'] . '`', '`TemplateVarResources_' . $column['column'] . '`.`contentid` = modResource.id AND `TemplateVarResources_' . $column['column'] . '`.`tmplvarid` = ' . $column['id']);