Como personalizar um tipo de conteúdo
Vamos utilizar como exemplo personalizar as páginas de notícias de um site com Avalanche. Usamos como referencia a versão 2.0.8-2 do Avalanche.
Quem manipula as notícias é a classe CMS_News.inc (avalanche/lib). Nesta classe existem métodos para exibir a lista de notícias (LoadArea, LoadList e LoadListItem) e a página de cada notícia (LoadDocument). O usuário deverá criar uma classe própria para tratar a notícia como bem entender. Pode optar por re-implementar toda a classe CMS_News, ou pode simplesmente herdar da classe CMS_News e redefinir somente o que deseja personalizar. Vamos usar este segundo caso como exemplo, mas o procedimento é similiar.
Um exemplo de classe que pode manipular somente a visualização da notícia pode ser um arquivo MY_News.inc:
<?php
require_once('CMS_News.inc');
class MY_News extends CMS_News
{
function LoadDocument(& $fields)
{
// loads document title
$this->pageBuilder->rootTemplate->addText($fields['title'],'title');
// publicationDate
$dateFormat = $this->pageBuilder->siteConfig->getVar('cms',
'newsDateFormat');
$publicationDate = strftime($dateFormat,(int)$fields['publicationDate']);
$content = "<h5 class='date'><small>$publicationDate</small></h5>\n";
// header
$content .= '<h1>'.$fields['title']."</h1>\n";
// load article's images
$content .= $this->page->LoadImages($fields['imageList']);
// content
$content .= "<div id='fileContent'>\n";
$content .= $fields['content'];
$content .= "</div>\n";
// loads main content to the page
$this->pageBuilder->rootTemplate->addText($content,'mainContent');
}
}
Agora, para fazer com que o Avalanche acesse a classe MY_News ao invés da classe CMS_News, basta alterar a tabela LIB_FolterType:
mysql> select * from LIB_FolderType;
+-----+-------------------------+-----------------+
| id | name | contentModule |
+-----+-------------------------+-----------------+
| 2 | LIB_FolderType_name_1 | CMS_Generic |
| 3 | LIB_FolderType_name_3 | CMS_News |
| 4 | LIB_FolderType_name_4 | CMS_Link |
| 5 | LIB_FolderType_name_5 | SHOP_Item |
| 6 | LIB_FolderType_name_6 | CMS_Event |
| 10 | LIB_FolderType_name_10 | WIKI_Content |
| 11 | NULL | WIKI_Comment |
| 13 | LIB_FolderType_name_13 | WIKI_Home |
| 14 | LIB_FolderType_name_14 | POR_Home |
| 15 | LIB_FolderType_name_15 | CMS_Publication |
| 16 | LIB_FolderType_name_16 | CMS_Contact |
| 17 | LIB_FolderType_name_17 | CMS_Gallery |
| 18 | LIB_FolderType_name_18 | CMS_Profile |
| 19 | LIB_FolderType_name_19 | CMS_Video |
| 100 | LIB_FolderType_name_100 | POR_Article |
| 101 | LIB_FolderType_name_101 | POR_Glossary |
+-----+-------------------------+-----------------+
16 rows in set (0.00 sec)
mysql> update LIB_FolderType set contentModule='MY_News' where id=3;
Pronto. A classe MY_News já deve ser chamada para tratar a função LoadDocument que irá exibir a notícia, conforme o exemplo acima.