/** * Gets the product reader of a certain page * @param Database_Result|int page object or page ID * @param int override setting from a module or content element * @return int reader page id */ public static function getReaderPageId($objOriginPage = null, $intOverride = 0) { if ($intOverride > 0) { return $intOverride; } if ($objOriginPage === null) { global $objPage; $objOriginPage = $objPage; } $intPage = is_object($objOriginPage) ? (int) $objOriginPage->id : (int) $objOriginPage; // return from cache if (isset(self::$arrReaderPageIds[$intPage])) { return self::$arrReaderPageIds[$intPage]; } $objDatabase = Database::getInstance(); if (!is_object($objOriginPage)) { $objOriginPage = $objDatabase->execute("SELECT * FROM tl_page WHERE id=" . $intPage); } // if the reader page is set on the current page id we return this one if ($objOriginPage->iso_setReaderJumpTo > 0) { self::$arrReaderPageIds[$intPage] = $objOriginPage->iso_readerJumpTo; return $objOriginPage->iso_readerJumpTo; } // now move up the page tree until we find a page where the reader is set $trail = array(); $pid = $objOriginPage->pid; do { $objParentPage = $objDatabase->execute("SELECT * FROM tl_page WHERE id=" . $pid); if ($objParentPage->numRows < 1) { break; } $trail[] = $objParentPage->id; if ($objParentPage->iso_setReaderJumpTo > 0) { // cache the reader page for all trail pages self::$arrReaderPageIds = array_merge(self::$arrReaderPageIds, array_fill_keys($trail, $objParentPage->iso_readerJumpTo)); return $objParentPage->iso_readerJumpTo; } $pid = $objParentPage->pid; } while ($pid > 0 && $objParentPage->type != 'root'); // if there is no reader page set at all, we take the current page object global $objPage; self::$arrReaderPageIds[$intPage] = $objPage->id; return $objPage->id; }