Busca

Acompanhe

RSS

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.