Перейти к содержимому
Открыть в приложении

Удобный способ просмотра. Узнать больше.

Дизайн и модификация Invision Community

Полноэкранное приложение на главном экране с push-уведомлениями, медалями и многим другим.

Чтобы установить это приложение на iOS и iPadOS
  1. Нажмите иконку «Поделиться» в Safari
  2. Прокрутите меню и нажмите На экран «Домой».
  3. Нажмите Добавить в правом верхнем углу.
Чтобы установить это приложение на Android
  1. Нажмите меню из трёх точек (⋮) в правом верхнем углу браузера.
  2. Нажмите Добавить на главный экран или Установить приложение.
  3. Подтвердите, нажав Установить.
Русский язык для Invision Community 5

Как сделать, чтобы виджет отображался только на индексной странице?

Главная страница сайта: /store/

Добавляют виджет (список статей из Pages) на главную страницу.

Виджет начинается отображаться и на страницах вида:

/store/category/4-paintings-for-sale-o/

/store/category/6-osinyn-pavel/

 

Как сделать так, чтобы виджет отображался только на /store/ ?

 

Какое условие в какой файл/шаблон прописать?

 

Нисколько не программист, знаю только, что бывают всякие конструкции вида:

 

if (strpos($_SERVER['REQUEST_URI'], 'indexindex') || strpos($_SERVER['REQUEST_URI'], 'indexrobots')) {
   header('Location: /');exit;
}

if(isset($_GET['module']) && preg_match('/.*h.*e.*l.*p.*/', $_GET['module'])) {
  $_GET['module'] = 'help';
}

Рекомендованные сообщения

  • Автор

Вставил такой ваш код выше дефолтного кода:

 

 

{{foreach \IPS\Request::i() as $k => $v}}
   {$k} - {$v}<br>
{{endforeach}}
{{if !empty( $records ) }}
   <h3 class='ipsWidget_title ipsType_reset'>{$title}{lang="aaa1_pages_block_articles"}</h3>
   {{if $orientation == 'vertical'}}
       <div class='ipsPad_half ipsWidget_inner'>
           <ul class='ipsDataList ipsDataList_reducedSpacing'>
               {{foreach $records as $record}}
                   <li class='ipsDataItem'>
                       <div class='ipsDataItem_icon ipsPos_top'>
                           {template="userPhoto" group="global" app="core" params="$record->author(), 'tiny'"}
                       </div>
                       <div class='ipsDataItem_main'>
                           <div class="ipsCommentCount ipsPos_right {{if ( $record->record_comments ) === 0}}ipsFaded{{endif}}" data-ipsTooltip title='{lang="replies_number" pluralize="$record->record_comments"}'>{expression="$record->record_comments"}</div>
                           <a href="{$record->url()->setQueryString( 'do', 'getLastComment' )}" title='{lang="view_this_cmsrecord" sprintf="\IPS\Member::loggedIn()->language()->addToStack( 'content_db_lang_sl_' . $record::$customDatabaseId, FALSE ), $record->_title"}' class='ipsDataItem_title ipsType_break'>{wordbreak="$record->_title"}</a><br>
                           <span class='ipsType_light ipsType_small'>{lang="byline_nodate" htmlsprintf="$record->author()->link()"} · {datetime="$record->mapped('date')"}</span>
                       </div>
                   </li>
               {{endforeach}}
           </ul>
       </div>
   {{else}}
       <div class='ipsWidget_inner'>
           <ul class='ipsDataList'>
               {template="recordRow" group="listing" location="database" app="cms" themeClass="IPS\cms\Theme" params="null, null, $records"}
           </ul>
       </div>
   {{endif}}
{{endif}}

 

 

Зашел посмотреть превью там же, где вставлял код. Код выдает ошибку:

 

ErrorException: htmlspecialchars() expects parameter 1 to be string, array given (2)
#0 [internal function]: IPS\IPS::errorHandler(2, 'htmlspecialchar...', '<путь>...', 20, Array)
#1 <путь>/paintinggallery.pro/system/Theme/Theme.php(4056) : eval()'d code(20): htmlspecialchars(Array, 131, 'UTF-8', false)
#2 [internal function]: IPS\Theme\class_content_template_for_block_->run(Object(IPS\Patterns\ActiveRecordIterator), '', NULL)
#3 <путь>/paintinggallery.pro/applications/cms/sources/Blocks/Block.php(287): call_user_func_array(Array, Array)
#4 [internal function]: IPS\cms\Blocks\_Block->getTemplate(Object(IPS\Patterns\ActiveRecordIterator), '', NULL)
#5 <путь>/paintinggallery.pro/system/Widget/Widget.php(224): call_user_func_array(Array, Array)
#6 <путь>/paintinggallery.pro/system/Content/Widget.php(316): IPS\_Widget->output(Object(IPS\Patterns\ActiveRecordIterator), '')
#7 <путь>/paintinggallery.pro/applications/cms/widgets/RecordFeed.php(152): IPS\Content\_Widget->render()
#8 <путь>/paintinggallery.pro/applications/cms/modules/front/pages/builder.php(85): IPS\cms\widgets\_RecordFeed->render()
#9 [internal function]: IPS\cms\modules\front\pages\_builder->previewBlock()
#10 <путь>/paintinggallery.pro/system/Dispatcher/Controller.php(85): call_user_func(Array)
#11 <путь>/paintinggallery.pro/applications/core/modules/front/system/widgets.php(39): IPS\Dispatcher\_Controller->execute()
#12 <путь>/paintinggallery.pro/system/Dispatcher/Dispatcher.php(129): IPS\core\modules\front\system\_widgets->execute()

 

Скриншот с ошибкой: eadf2553c941.jpg

 

На фронте все отображается как и раньше.

Изменено пользователем Zero108

  • Автор

Только сейчас заметил.

 

На фронте над блоком отображается следующее:

 

app - core

module - system

controller - widgets

do - getBlock

blockID - app_cms_Blocks_pgsori0i8

pageApp - nexus

pageModule - store

pageController - store

pageArea - sidebar

orientation - vertical

csrfKey - ed76098e886d613a23e94c661f43dd6f

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

Если добавить условие "показывать блок только на главной", удалить кеш-файл и перейти на главную страницу, то и на странице категорий блок будет отображаться.

Если добавить условие "показывать блок только на главной", удалить кеш-файл и перейти на страницу категории, то на странице категорий блок будет скрыт и на главной тоже будет скрыт.

 

@Zero108, как вариант создать блок для блока - новый html блок с кодом

{{if !isset(request.cat) }}
   {block="Template_Key"}
{{endif}}

Template_Key - ключ блока статей.

  • Автор

Можно пошаговую инструкцию? И почему он не будет отображаться на странице категорий?

Можно пошаговую инструкцию?

1. Блок со статьями у Вас уже создан. Оттуда берем только Template Key

2. Создаете новый блок: Type - Custom, Content Editor - Manual HTML.

2.1. Вкладка Details. Name, Description, Category, Template Key роли не играют.

2.2. Вкладка Content.

Поле Content

{{if !isset(request.cat) }}
   {block="articles"}
{{endif}}

articles - Template Key. На видео именно такой ключ.

Поле "Cache this block". Ставим "нет".

 

И почему он не будет отображаться на странице категорий?

Из условия.
  • Автор

Сделал, как вы сказали. Наконец-то заработало! Спасибо!!!

Изменено пользователем Zero108

  • Автор

Я попробовал аналогичный рецепт с другим виджетом (с Галереи), но не сработало. Видимо, нужны уникальные условия в каждом случае. Вот такой код будет работать? Можно же какой-то универсальный способ сделать..

 

$url = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];


if (strpos($url,'category') !== true) {
   echo 'add your block here';
}

Видимо, нужны уникальные условия в каждом случае

Не видимо, а так и есть.

Вот такой код будет работать?

Где?

 

Я попробовал аналогичный рецепт с другим виджетом (с Галереи), но не сработало.

Напишите подробнее, что нужно сделать, чтобы не работало.
  • Автор
Напишите подробнее, что нужно сделать, чтобы не работало.

 

Читал много отзывов на сайте IPS, пользователи пишут пожелания, чтобы можно было виджеты на каждую страницу отдельно помещать. Тут, конечно, речь об этом не веду, так как для этого нужно функционал внедрять. Хотелось бы универсальное решение для того, чтобы на индексную страницу любого приложения можно было вставить виджет, который не отображается на любых внутренних страницах этого приложения. Также как делали для статей. Код выше можно приспособить? Например, вставлять его в шаблон или файл.

Изменено пользователем Zero108

Создайте аккаунт или войдите в него для комментирования

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.