Форум пользователей Impera CMS
Impera CMS - отличный движок для лёгкого создания интернет магазина.
Обладает невероятным количеством функций, необходимых в онлайн торговле.

Разбиение статей на категории

Следить
Главная
10:30
15 июл
#
?
Василий написал:

Добрый день,

Возможна ли в системе разбиение статей на категории? Возможность вызова статей в блоки по конретным категориям.

В блоке один - статьи из категории 1

В блоке два - статьи из категории 2

Или нет такой возможности?

17:08
16 июл
#
Разработчик написал:

Если в админпанели зайти в пункт меню страницы → Статьи и выбрать какую-нибудь статью на редактирование, то на странице статьи в нижней части увидим два поля Категория и Бренд. Каждое предназначено для привязывания статьи к конкретной категории и бренду соответственно.

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

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

Когда посетитель сайта переходит на страницу чисто категории или чисто бренда или же категории + какого-то входящего в нее бренда, движок согласно этому извлекает из базы данных привязанные к ней статьи и новости и отправляет их список в шаблон сайта в переменных $articles_for_category и соответственно $news_for_category. Если переход был на страницу чисто категории, то в этих переменных содержатся статьи / новости категории. Если же переход был на страницу бренда или категория+бренд, то переменные содержат статьи / новости бренда.

Далее в нужном месте шаблона в цикле пробегаем по содержимому переменных (каждая по сути является массивом записей о статьях / новостях) и выводим в нужной форме. Дадим пример вывода статей категории / бренда:

{* если точно получили список статей категории *}
{if isset($articles_for_category) && is_array($articles_for_category)
                                  && !empty($articles_for_category)}

    {* перебираем в цикле статьи *}
    {foreach $articles_for_category as $r}

        {* даем ссылку на статью *}
        <a href="{strip}
                        {$site|default:''|escape}
                        {if !$r->url_special|default:false}
                            articles/
                        {/if}
                        {$r->url|default:''|escape}
                 {/strip}">

            {* выводим название статьи *}
            {$r->header|default:'Нет названия!'}

        </a>

        {* показываем аннотацию (краткий текст) *}
        <div class="material-announce">
            {$r->annotation|default:''}
        </div>

    {/foreach}

{/if}

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

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

Обратите внимание также на блочный тег strip, использованный внутри тега <a>. Он склеивает входящие в него строки в одну единственную и поставлен здесь затем, чтобы шаблонизатор Smarty склеил правильный (однострочный без пробелов и переносов) адрес ссылки, а Вы при этом могли легко видеть по коду, каким образом формируется ссылка на страницу статьи: берем URL сайта; если менеджер не назначил этой статье особый URL, то клеим дальше строку articles/; и в конец доклеиваем URL самой страницы.

И теперь такой же пример вывода новостей категории / бренда:

{* если точно получили список новостей категории *}
{if isset($news_for_category) && is_array($news_for_category)
                              && !empty($news_for_category)}

    {* перебираем в цикле новости *}
    {foreach $news_for_category as $r}

        {* даем ссылку на новость *}
        <a href="{strip}
                        {$site|default:''|escape}
                        {if !$r->url_special|default:false}
                            news/
                        {/if}
                        {$r->url|default:''|escape}
                 {/strip}">

            {* выводим название новости *}
            {$r->header|default:'Нет названия!'}

        </a>

        {* показываем аннотацию (краткий текст) *}
        <div class="material-announce">
            {$r->annotation|default:''}
        </div>

    {/foreach}

{/if}


Что касается возможности одновременно выводить два и более блоков статей, где в каждом блоке перечислены статьи отдельной категории, то пока этой возможности в движке нет. Только один блок, относящийся к текущей категории / бренду.

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

12:15
17 июл
#
?
Василий написал:

Спасибо!

Эту возможность я видел.

Меня интересует следующий механизм.

Есть статьи. У статей есть свои категории, помимо того что их можно привязывать к категориям магазина.

Допустим - Статьи о рыбалке, статьи о удочках, статьи о рыбаках.

При заходе в Статьи просто - выводится список всех статей со всех категорий.

При заходе в категорию статей о рыбалке - выводятся статьи принадлежащие к категории рыбалка.

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

1 блок - выводит три статьи из категории статьи о рыбалке.

2. блок выводит статьи о рыбаках.

3 блок - выводит все последние добавленные статьи .

Если я правильно понял, та на данный момент такой возможности нет.

12:59
17 июл
#
Разработчик написал:

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

В следующем обновлении появится интерфейс взаимодействия с движком из шаблона, и тогда например на главной (в шаблоне главной страницы) человек сможет объявить блок1, блок2 ... блокN, а перед каждым обратиться к движку и запросить конкретную информацию. Выглядеть это будет примерно так:

  {* в переменную $my_list получаем 4 последние статьи из категории О удочках *}
  {get_articles from = 'Отдых / Рыбалка / О удочках'
                count = 4
                order = 'last'
                assign = 'my_list'}

  {* выводим содержимое $my_list в блок1 *}
  <div class="block-1">
      ...
      ...
  </div>



  {* получаем 5 ранних статей из категории О рыбаках *}
  {get_articles from = 'Отдых / О рыбаках'
                count = 5
                order = 'first'
                assign = 'my_list'}

  {* выводим содержимое $my_list в блок2 *}
  <div class="block-2">
      ...
      ...
  </div>



  {* получаем 3 последние новости из всех категорий *}
  {get_news from = ''
            count = 3
            order = 'last'
            assign = 'my_list'}

  {* выводим содержимое $my_list в блок3 *}
  <div class="block-3">
      ...
      ...
  </div>


  и так далее

Такой интерфейс при достаточном наборе псевдо-функций (get_НЕЧТО) и продуманной структуре параметров позволит реализовывать на сайте нетривиальные решения. Я уже сам вижу, что люди начали делать для Имперы хорошие модули, но в отдельных случаях из-за специфики модуля сталкиваются с проблемой - как получить от движка определенные сведения именно из некоторой страницы шаблона.

Написание ответа

Перед публикацией рекомендуется использовать Предпросмотр, чтобы увидеть конечный вид сообщения.


Обратите внимание! Для противодействия спаму новые посты форума проявляются с задержкой от нескольких минут, пока не пройдут модерацию.


Хостинг для сайта

Хостинг для интернет магазина

Svai.net

Украина
г. Черкассы
5+ Заказать

TutHost.ua

Украина
г. Киев
Заказать

Mirohost.net

Украина
г. Киев
? Заказать

HyperHosting.com.ua

Украина
г. Винница
i подробнее Заказать

Agava.ru

Россия
г. Москва
Заказать

Ukraine.com.ua

Украина
г. Киев
5 Заказать
Импераготовасотрудничатьс провайдерами Важно Учтите Этот список перечисляет лишь некоторых хостинг-провайдеров, у которых существуют специальные тарифные планы для интернет магазинов, а сам список не означает, что другие провайдеры чем-то хуже.

Существующие в списке оценки по 5-бальной шкале не должны учитываться при выборе, так как носят субъективный характер и касаются соотношения цена-качество-скорость только для самых дорогих тарифных планов.

Демо Главная Хронология Соглашение Материалы Контакты