public static function getPage($pageId)
{
// redefine
$pageId = (int) $pageId;
// get database instance
$db = self::getContainer()->get('database');
// get data
$record = (array) $db->getRecord('SELECT p.id, p.parent_id, p.revision_id, p.template_id, p.title, p.navigation_title,
p.navigation_title_overwrite, p.data, p.hidden,
m.title AS meta_title, m.title_overwrite AS meta_title_overwrite,
m.keywords AS meta_keywords, m.keywords_overwrite AS meta_keywords_overwrite,
m.description AS meta_description, m.description_overwrite AS meta_description_overwrite,
m.custom AS meta_custom,
m.url, m.url_overwrite,
m.data AS meta_data,
t.path AS template_path, t.data AS template_data
FROM pages AS p
INNER JOIN meta AS m ON p.meta_id = m.id
INNER JOIN themes_templates AS t ON p.template_id = t.id
WHERE p.id = ? AND p.status = ? AND p.language = ?
LIMIT 1', array($pageId, 'active', LANGUAGE));
// validate
if (empty($record)) {
return array();
}
// if the page is hidden we need a 404 record
if ($record['hidden'] === 'Y' && $pageId !== 404) {
return self::getPage(404);
}
// unserialize page data and template data
if (isset($record['data']) && $record['data'] != '') {
$record['data'] = unserialize($record['data']);
}
if (isset($record['meta_data']) && $record['meta_data'] != '') {
$record['meta_data'] = unserialize($record['meta_data']);
}
if (isset($record['template_data']) && $record['template_data'] != '') {
$record['template_data'] = @unserialize($record['template_data']);
}
// get blocks
$blocks = (array) $db->getRecords('SELECT pe.id AS extra_id, pb.html, pb.position,
pe.module AS extra_module, pe.type AS extra_type, pe.action AS extra_action, pe.data AS extra_data
FROM pages_blocks AS pb
INNER JOIN pages AS p ON p.revision_id = pb.revision_id
LEFT OUTER JOIN modules_extras AS pe ON pb.extra_id = pe.id AND pe.hidden = ?
WHERE pb.revision_id = ? AND p.status = ? AND pb.visible = ?
ORDER BY pb.position, pb.sequence', array('N', $record['revision_id'], 'active', 'Y'));
// init positions
$record['positions'] = array();
// loop blocks
foreach ($blocks as $block) {
// unserialize data if it is available
if (isset($block['data'])) {
$block['data'] = unserialize($block['data']);
}
// save to position
$record['positions'][$block['position']][] = $block;
}
return $record;
}