Ich glaube für den Zweck muss ich die PageLayoutView überschreiben, sieht mir nicht so aus, als könnte ich das von außen beeinflussen.
$queryParts = $this->makeQueryArray('tt_content', $id, 'AND colPos=' . intval($key) . $showHidden . $showLanguage);
Ist es sinnvoll diesen Weg zu gehen?
Die Website, um die es geht soll im Frontend nach einer bestimmten Kategorie - nennen wir das Kind beim Namen - nach einer Region gefiltert werden.
Um die Sitemap nicht mehrfach vorhanden zu haben aber den Content Editoren einen Überblick über die verschiedenen Regionen zu geben, wäre es von Vorteil die Contents Regionen zuweisen zu können und natürlich in weiterer Folge im Backend auch darauf zu filtern.
Dann gäbe es evtl. die Möglichkeit einen Punkt tiefer anzusetzen.
public function makeQueryArray($table, $id, $addWhere = '', $fieldList = '*') {
$hookObjectsArr = array();
if (is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/class.db_list.inc']['makeQueryArray'])) {
foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/class.db_list.inc']['makeQueryArray'] as $classRef) {
$hookObjectsArr[] = \TYPO3\CMS\Core\Utility\GeneralUtility::getUserObj($classRef);
}
}
// Set ORDER BY:
$orderBy = $GLOBALS['TCA'][$table]['ctrl']['sortby'] ? 'ORDER BY ' . $GLOBALS['TCA'][$table]['ctrl']['sortby'] : $GLOBALS['TCA'][$table]['ctrl']['default_sortby'];
if ($this->sortField) {
if (in_array($this->sortField, $this->makeFieldList($table, 1))) {
$orderBy = 'ORDER BY ' . $this->sortField;
if ($this->sortRev) {
$orderBy .= ' DESC';
}
}
}
// Set LIMIT:
$limit = $this->iLimit ? ($this->firstElementNumber ? $this->firstElementNumber . ',' : '') . ($this->iLimit + 1) : '';
// Filtering on displayable pages (permissions):
$pC = $table == 'pages' && $this->perms_clause ? ' AND ' . $this->perms_clause : '';
// Adding search constraints:
$search = $this->makeSearchString($table, $id);
// Compiling query array:
$queryParts = array(
'SELECT' => $fieldList,
'FROM' => $table,
'WHERE' => $this->pidSelect . ' ' . $pC . \TYPO3\CMS\Backend\Utility\BackendUtility::deleteClause($table) . \TYPO3\CMS\Backend\Utility\BackendUtility::versioningPlaceholderClause($table) . ' ' . $addWhere . ' ' . $search,
'GROUPBY' => '',
'ORDERBY' => $GLOBALS['TYPO3_DB']->stripOrderBy($orderBy),
'LIMIT' => $limit
);
// Filter out records that are translated, if TSconfig mod.web_list.hideTranslations is set
if ((in_array($table, \TYPO3\CMS\Core\Utility\GeneralUtility::trimExplode(',', $this->hideTranslations)) || $this->hideTranslations === '*') && !empty($GLOBALS['TCA'][$table]['ctrl']['transOrigPointerField']) && strcmp($table, 'pages_language_overlay')) {
$queryParts['WHERE'] .= ' AND ' . $GLOBALS['TCA'][$table]['ctrl']['transOrigPointerField'] . '=0 ';
}
// Apply hook as requested in http://bugs.typo3.org/view.php?id=4361
foreach ($hookObjectsArr as $hookObj) {
if (method_exists($hookObj, 'makeQueryArray_post')) {
$_params = array(
'orderBy' => $orderBy,
'limit' => $limit,
'pC' => $pC,
'search' => $search
);
$hookObj->makeQueryArray_post($queryParts, $this, $table, $id, $addWhere, $fieldList, $_params);
}
}
// Return query:
return $queryParts;
}
Hier scheint man eingreifen zu können. Wie weitreichend kann man die Resultate hier modifizieren? Sehe ich auf Anhieb nicht.
Einen ToolbarItemHook scheint es auch zu geben, in der Toolbar kann ich also scheinbar Elemente einfügen (wie zb einen Content Filter für die Regionen/Kategorien).
hmmmm....
Aber außer separaten Seitenbäumen sehe ich momentan keine andere Möglichkeit das zu lösen.