Select content ICMS2

#1 22 ноября 2014 в 22:52
Доброго времени суток.
Вопрос больше к уважаемому R2., но может кто уже хорошо разобрался в ICMS2 и сможет подсказать :)
как функционалом cms получить конструкцию вывода определенного типа контента в tpl.php следующего вида (вывод посредством JavaScript и jQuery получаю, но не хочется городить огород...):


  1.  
  2. Выберите категорию:
  3. -Астрономия
  4. -Геология
  5. .....
  6.  
  7. Выберите статью:
  8. -
  9. -
  10.  
при выборе статьи из 2 списка — переход к выбранной статье по полю slug.
#2 22 ноября 2014 в 23:46
В чем именно вопрос, не понял? Как получить типы контента и записи из базы? Или как их вывести в шаблоне?
#3 23 ноября 2014 в 08:06
В tpl.php компонента получить данные из БД в виде динамического списка.
в первом списке категории определенного типа контента, при выборе категории во втором списке — список статей выбранной категории и перенаправить при выборе статьи на страницу самой статьи.
Другими словами передать в шаблон следующую конструкцию посредством функционала icms
  1.  
  2. <подключаемся к базе данных>
  3.  
  4. <?php
  5. echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post">'."\n";
  6. // Получаем из БД список категорий
  7. $query = 'SELECT id, title FROM cms_con_articles_cats WHERE parent_id=1 ORDER BY id';
  8. $res = mysql_query( $query );
  9. echo 'Категория: <select name="category" id="category" onchange="getList(this.value, \'\');">'."\n";
  10. echo '<option value="0">Выберите категорию</option>'."\n";
  11. while ( $ctg = mysql_fetch_array( $res ) ) {
  12. echo '<option value="'.$ctg['id'].'">'.$ctg['title'].'</option>'."\n";
  13. }
  14. echo '</select>'."\n";
  15. ?>
  16. <далее формирование списка статей выбранной категории при помощи jQuery>
  17.  
что-то вроде выпадающего списка на этом форуме "Перейти на форум: ...."

пробовал вывести на примере "geo". но получаю ошибку…
#4 23 ноября 2014 в 10:07
Задача в принципе следующая:
на странице компонента предоставить выбор из выпадающего списка названия категорий, далее при выборе определенной категории сформировать список названия статей из выбранной категории, далее при выборе названия статьи передать и вывести на странице $переменная1 — значение1 из БД (допустим значение поля content) и $переменная2 — значение2 из БД (допустим значение поля slug)



Оговорюсь еще раз, данный вывод я получаю непосредственно в шаблоне компонента при помощи подключения к БД с использованием jQuery, а хотелось бы понять реализацию с использованием функционал ICMS2.

Теоретически я понял, что нужно обратиться к модели компонента контент, определить нужный тип контента в content_types и сформировать список для con_articles_cats. далее вывести результат в виде списка в tpl.php компонента. следом используя полученный результат сформировать список статей с учетом выбранной категории. и в конце вывести результат в переменные при выборе статьи.
Но не совсем понял реализацию.
#5 23 ноября 2014 в 11:42
1. Получаем модель контента:
  1. $content_model = cmsCore::getModel('content');
2. Получаем дерево категорий (второй параметр определяет показывать корневую категорию или нет):
  1. $categories = $content_model->getCategoriesTree('articles', false);
3. В полученном массиве каждый элемент содержит все данные (поля) каждой категории. Нам нужно преобразовать этот массив в простой список id => title, чтобы потом вывести в <select>:
  1. $categories_list = array_collection_to_list($categories, 'id', 'title');
4. Формируем и выводим <select>:
  1. echo html_select('category', $categories_list);
Список записей для категории нужно формировать где-то (например, в экшене собственного контроллера) по AJAX-запросу и возвращать в виде JSON. С помощью jQuery при выборе категории запрашивать список записей и заполнить им второй select.

Получить записи контента articles для категории $category_id:
  1.  
  2. // получаем модель
  3. $content_model = cmsCore::getModel('content');
  4. / /получаем категорию
  5. $category = $content_model->getCategory('articles', $category_id);
  6. // фильтруем по категории и получаем список записей
  7. $items = $content_model->filterCategory('articles', $category)->getContentItems('articles');
  8. // преобразуем полученный массив в простой список id => title
  9. $items_list = array_collection_to_list($items, 'id', 'title');
  10. // рендерим и возвращаем JSON
  11. cmsTemplate::getInstance()->renderJSON($items_list);
  12.  
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.