Центр документации
Карта сайта

Новая документация

Расширенная настройка
Разработчикам (API)

Обновленная документация 

Разработчикам (API)

Простые примеры работы с новостями


В этой главе будут рассмотрены несколько примеров работы с новостями (получение новости, получение списка новостей) и классы для генерации результатов вывода. В приведенных ниже примерах показана только та часть кода, которая непосредственно отвечает за получение требуемых данных. Точка входа (отдельно стоящий скрипт или плагин) может быть любой.


        4.1 Получение новости


Получение новости с идентификатором id=1 и вывод данных:
Используемые методы будут пояснены в дальнейших примерах.

$oNewsItem = AMI::getResourceModel('news/table')->find(1);
echo "News item ID = ".$oNewsItem->id."<br>";
print_r(iterator_to_array($oNewsItem));

     

        4.2 Получение списка новостей


Получение значений столбцов id, header у трех новостей и печать данных.

$oNewsList = AMI::getResourceModel('news/table')->getList()
->addColumns(array('id', 'header'))
->setLimitParameters(0, 3)->load();
print_r(array_map('iterator_to_array', iterator_to_array($oNewsList)));

Или поэлементная печать, используя foreach:

$oNewsList = AMI::getResourceModel('news/table')
->getList()->addColumns(array('id', 'header'))
->setLimitParameters(0, 3)->load();
foreach($oNewsList as $oNewsItem) {
print_r(iterator_to_array($oNewsItem));
}

        4.3 Рабочий пример вывода списка новостей


Предполагается разработка на домене cms.my.

Задача – создать скрипт my_news.php, выводящий 3 опубликованных русскоязычных новости в виде таблицы, состоящей из 2 столбцов: дата, название. Т.е. http://cms.my/my_news.php выводит требуемую таблицу новостей.


               4.3.1 Исходный код

Поскольку файл содержит код HTML, необходимо сохранять его в кодировке UTF-8.

<?php
require 'ami_env.php';

// Get response object
$oResponse = AMI::getSingleton('response');
$oResponse->start();

/*
Код, находящийся между комментариями «Show items list start» и «Show items list end» отвечает непосредственно за генерацию списка элементов.
*/
// *************
// Show items list start
// *************

$modId = 'news';

/*
Получение объекта модели для списка:
*/
$oNewsModelList = AMI::getResourceModel($modId . '/table')->getList();

/*
На список накладываются фильтры, порядок сортировки, лимиты, выбираются поля объектов, которые должны быть загружены, и происходит загрузка элементов из базы данных:
*/

$oNewsModelList
->addColumns(array('date_created', 'header', 'id'))
->addOrder('date_created', ' desc')
->addWhereDef('AND ' . $oNewsModelList->getFieldName('public') . ' = 1')
->addWhereDef('AND ' . $oNewsModelList->getFieldName('lang') . " = 'ru'")
DB_Query::getSnippet('AND %s = %s')
->plain($oNewsModelList->getFieldName('lang'))
->q('ru')
)
->setLimitParameters(0, 3)
->load();

/*
Производится подготовка переменной, для сбора таблицы результатов вывода:
*/

$res = '<table>';
$res .= '<tr><th>Дата</th><th>Название</th></tr>';

/*
Цикл по списку элементов:
Следует обратить внимание, что $oNewsModelItem, получаемый в цикле, это объект модели элемента.
*/

foreach($oNewsModelList as $oNewsModelItem) {
$res .= '<tr><td>' . $oNewsModelItem->date_created . '</td><td>' . $oNewsModelItem->header . '</td></tr>';
}

/*
Закрытие таблицы:
*/

$res .= '</table>';

// *************
// Show items list end
// *************
$oResponse->write($res);
$oResponse->send();


   
             4.3.2 Список доступных полей модели

Список доступных полей модели возвращает метод

AMI_ModTable::getAvailableFields():

AMI::getResourceModel($modId . '/table')->getAvailableFields();

Общие поля, присутствующие в большинстве моделей:

Поле

Тип

Описание

Общие поля

id

целое

Идентификатор

public

0/1

1 – элемент доступен, 0 – элемент неопубликован

archive

0/1

Статус архивности

header

строка

Заголовок

announce

строка

Краткое описание

body

строка

Полное описание

lang

строка, 2-3 символа

Принадлежность элемента к локализации (ru, en, de, и т.д.)

date_created

дата

Дата создания

date_modified

дата

Дата модификации

sublink

строка

Собственная часть URL элемента на публичной части сайта

id_page

Целое

Идентификатор страницы элемента в менеджере сайте (0 – общий элемент)

id_owner

Целое

Идентификатор владельца элемента

position

Целое

Позиция для сортировки в ручном режиме

details_noindex

0/1

Флаг, регулирующий запрет индексации поисковиками деталей

hide_in_list

0/1

Флаг, регулирующий скрытие элемента в списках, без запрета на показ по прямой ссылке.

sticky

0/1

Флаг, указывающий, что элемент является прикрепленным в списке

date_sticky_till

строка, дата

Срок действия флага прикрепленности

Поля расширения изображений

ext_img

строка

Файл изображения

ext_img_small

строка

Файл малого изображения

ext_img_popup

строка

Файл всплывающего изображения

Поля расширения рейтингов

ext_rate_count

целое

Число голосов

ext_rate_rate

целое

Рейтинг элемента

Поля расширения обсуждения

ext_dsc_disable

0/1

Флаг, регулирующий запрет обсуждения элемента

Поля расширения категорий (добавляются только при активированном расширении категорий)

cat_id

целое

Идентификатор категории

cat_header

строка

Заголовок категории

cat_sublink

строка

Собственная часть URL категории элемента на публичной части сайта



Данный метод может использоваться для проверки наличия полей у требуемой модели


            4.3.3 Объект AMI_Response

Объект AMI_Response предназначен для управления выводом: вывод HTTP-заголовков, буферизация, кеширование, замеры и отладка скорости работы.

Объект создается автоматически при работе всех стандартных модулей Amiro.CMS, и его настоятельно рекомендуется использовать при создании собственных скриптов.

Создание объекта:

// Get response object
$oResponse = AMI::getSingleton('response');
$oResponse->start();

Вывод результата в требуемом формате (JSON или HTML):

$oResponse->write($res);
$oResponse->send();

          

           4.3.4 Шаблонизатор AMI_Template, AMI_TemplateSystem

В приведенном выше примере для упрощения кода не используются шаблоны и логика смешана с отображением. В реальном коде делать так крайне не рекомендуется. API предоставляет два вида шаблонизаторов – полный и облегченный. Пример использования будет показан в MVC разделе данного руководства.

При разработке для публичной части сайта рекомендуется использовать некеширующий шаблонизатор AMI_Template, работающий только с шаблонами на диске, содержащий минимально достаточный функционал, потребляющий минимум памяти и процессорного времени. Полный шаблонизатор AMI_TemplateSystem рекомендуется использовать, только если базовым функционалом обойтись заведомо невозможно..

В плагине достаточно использовать AMI_Template в случаях если:

  • Плагин является некэшируемым, важна скорость обработки шаблона (типовой пример – плагин для отдачи быстрых AJAX запросов).
  • Шаблоны содержат только заменяемые переменные типа ##name##, ##link## и т.д. Поддержка специальных конструкций ##if(...)##, ##include_template...##, ##setvar...## и т.п. в лёгком шаблонизаторе отсутствует.
  • Шаблон не содержит конструкции подключения языковых файлов, например %%include_language...%%. Все языковые файлы должны быть добавлены в PHP коде плагина. Тем не менее языковые переменные типа %%caption%% обрабатываются.
  • Шаблоны лежат только на жёстком диске.

Типовые операции с шаблонами:

 Операция

 Пример вызова

 Создание объекта

 $oTpl = new AMI_Template;

 Добавление блока

 oTpl->addBlock('my_block', 'templates/my_tpl.tpl');

 Парсинг шаблона

 $str = $oTpl->parse('my_block:my_set', $aScope);

 Добавление блока

 oTpl->addBlock('my_block', 'templates/my_tpl.tpl');

 Парсинг языкового файла

 $aLang = $oTpl->parseLocale('templates/lang/my_lang.lng');



AMI_TemplateSystem в отличие от AMI_Template поддерживает чтение шаблонов из базы и позволяет использовать полный функционал системы.


Типовые операции с шаблонами:


 Операция

 Пример вызова

 Создание объекта

$oTpl = new AMI_TemplateSystem;

Переключение источника шаблонов

$oTpl->addBlock('templates/', 'db');

 Добавление блока

$oTpl->addBlock('my_block', 'templates/my_tpl.tpl');

 Парсинг шаблона

$str = $oTpl->parse('my_block:my_set', $aScope);

 Парсинг языкового файла

$aLang = $oTpl->parseLocale('templates/lang/my_lang.lng');


              4.3.5 Комментарии
              4.3.5.1 Перенос кода примера в плагин

Следует обратить внимание, что для того, чтобы создать плагин, выводящую аналогичную таблицу, достаточно код, размещенный между комментариями «Show items list start» и «Show items list end» добавить, например, в качестве спецблока плагина, и вернуть результат в переменную $resultHtml.

Т.е. если в спецблоке плагина используется файл my_specblock.php, то он должен выглядеть так:

<?php

// *************
// Show items list start
// *************

...

// *************
// Show items list end
// *************

$resultHtml = $res;

              4.3.5.2 Автоматическая генерация изображений

Если при разработке скриптов с использованием точки входа ami_env.php требуется функциональность автоматической генерации изображений, заложенная в системе, параметры автоматической генерации, соответствующие одноимённым настройкам модулей в секции «Расширение «Изображения»», необходимо задавать следующим образом:


<?php
$modId = 'news';

// Выбранные изображения будут уменьшены автоматически
AMI::setOption($modId, 'generate_pictures', array('picture', 'popup_picture', 'small_picture'));

// Приоритетное исходное изображение
AMI::setOption($modId, 'prior_source_picture', 'popup_picture');

// Максимальная ширина уменьшенного изображения
AMI::setOption($modId, 'picture_maxwidth', 300);

// Максимальная высота уменьшенного изображения
AMI::setOption($modId, 'picture_maxheight', 300);

// Максимальная ширина маленького изображения 
AMI::setOption($modId, 'small_picture_maxwidth', 80);

// Максимальная высота маленького изображения
AMI::setOption($modId, 'small_picture_maxheight', 80);

// Максимальная ширина всплывающего изображения 
AMI::setOption($modId, 'popup_picture_maxwidth', 800);

//  Максимальная высота всплывающего изображения
AMI::setOption($modId, 'popup_picture_maxheight', 600);
// Увеличивать ли изображение, если оно меньше чем задано 
AMI::setOption($modId, 'generate_bigger_image', true);

Установка и настройка Руководство пользователя Интеграция дизайна Разработчикам (API) Документация для скачивания
 2000 – 2011 © Amiro.CMS Все права защищены.
Работает на: Amiro CMS