Jump to content
andros0789

Как скрыть блоки на определенной странице?

Recommended Posts

Вот на DLE например имеются такие теги:

[not-aviable=main] {content} [/not-aviable] 
[aviable=fullstory] {content} [/aviable] 

Как например в GlobalTemplate прописать , а точнее скрыть например <div class="1"></div> на форумах, а показать на страницах? Или скрыть на страницах, а показать в полной новости на этих страницах? Кто владеет данной информацией, помогите советом , очень нужно для моего проекта. Заранее благодарен знатоки!

 

И PS Не по теме:

Снимок.PNG

Edited by andros0789
удалил лишний тег

Share this post


Link to post
Share on other sites
9 часов назад, andros0789 сказал:

Как например в GlobalTemplate прописать , а точнее скрыть например <div class="1"></div> на форумах, а показать на страницах?

А в чем проблема?

<div class="1 ipsHide"></div>

Не будет показываться нигде

а в css прописываем

body[data-pageapp="cms"] .1 {
	display: block;
}

Вариант 2 - еще лучше/ Через переменную $location , которая в GlobalTemplate есть.

{{if $location['app'] == 'cms'}}
	<div class="1"></div>
{{endif}}

 

9 часов назад, andros0789 сказал:

Или скрыть на страницах, а показать в полной новости на этих страницах?

Здесь сложнее, т.к. и $location['app']  и $location['module']  будут одинаковыми. Но есть  выход, называется bodyClasses .

В шаблоне  страницы record.phtml добавляем bodyClasses, например вот так 

{{\IPS\Output::i()->bodyClasses[] = 'fullNews';}}

И тогда у нас body уже имеет доп. класс fullNews / Соот-но или через css  body.fullNews или чекркз проверку существования класса

{{if !in_array('fullNews', \IPS\Output::i()->bodyClasses )}}

блаблабла

{{endif}}

 

9 часов назад, andros0789 сказал:

И PS Не по теме:

Там три буквы пропущено, фильтр плохих слов не прошли

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
13 часов назад, andros0789 сказал:

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

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

[not-aviable=main] {content} [/not-aviable] 

отличается от

{{if $location['app'] == 'cms'}}
	Блок
{{endif}}

???????

 

Или опиши конкретно, что где хочешь, а то не понятно о каком блоке речь, толи ты его ручками в шаблоне прописываешь, толи это кастом блок от pages толи еще что

Share this post


Link to post
Share on other sites
18 минут назад, kgb сказал:

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

[not-aviable=main] {content} [/not-aviable] 

отличается от

{{if $location['app'] == 'cms'}}
	Блок
{{endif}}

???????

 

Или опиши конкретно, что где хочешь, а то не понятно о каком блоке речь, толи ты его ручками в шаблоне прописываешь, толи это кастом блок от pages толи еще что

От души за помощь)) буду пилить дальше)

А вот еще вопрос) Как к примеру в краткой новости в Pages прописать показ изображения (к примеру иконку что это видео новость а не обычная новость) в зависимости от категории? К примеру на главной странице новостей показаны новости всех категорий, но у всех идет один шаблон, только с показом иконки PLAY на изображении к новости. которая накладывается условием типа если это видео, то показать, если обычная, то скрыть.^_^

Share this post


Link to post
Share on other sites
9 минут назад, andros0789 сказал:

к примеру иконку что это видео новость а не обычная новость

А чем видео новость отличается от обычной?

Share this post


Link to post
Share on other sites
Только что, kgb сказал:

А чем видео новость отличается от обычной?

внутри будут шаблоны разные) И в краткой новости просто накладывается иконка PLAY

9 минут назад, kgb сказал:

А чем видео новость отличается от обычной?

вот так к примеру, то что нужно

Снимок.PNG

Share this post


Link to post
Share on other sites
2 минуты назад, andros0789 сказал:

внутри будут шаблоны разные

Это как? Для отображения базы данных используется - для полной записи - группа шаблонов "display",  для категорий -  "listing", для главной страницы базы - в зависимости от настроек - или "category_articles" ( с вариантами category_2_column_first_featured, category_2_column_image_feature и т.д. ) или "category_index" . Разные шаблоны для одной базы ,  например разные шаблоны display сделать нельзя. Я не понимаю.

 

Самое простое, добавить поле чекбокс и включать его при добавлении видео-новости. А потом проверять в шаблоне и в зависимости от значения выводить то, что надо

Share this post


Link to post
Share on other sites
Только что, kgb сказал:

Это как? Для отображения базы данных используется - для полной записи - группа шаблонов "display",  для категорий -  "listing", для главной страницы базы - в зависимости от настроек - или "category_articles" ( с вариантами category_2_column_first_featured, category_2_column_image_feature и т.д. ) или "category_index" . Разные шаблоны для одной базы ,  например разные шаблоны display сделать нельзя. Я не понимаю.

 

Самое простое, добавить поле чекбокс и включать его при добавлении видео-новости. А потом проверять в шаблоне и в зависимости от значения выводить то, что надо

Тоже дело говоришь!) Соглашусь)
А вот как к примеру разные два кастомных блока на  разных страницах показать? К примеру в категории один блок а в полной новости другой боковой блок? Так же как и выше описали?

Share this post


Link to post
Share on other sites
1 минуту назад, andros0789 сказал:

А вот как к примеру разные два кастомных блока на  разных страницах показать?

Если речь идет о блоках pages, добавляемых  через менеджер виджетов, то стандатным средство это никак, я писал выше, что

15 часов назад, kgb сказал:

и $location['app']  и $location['module']

а движек для определения места блока использует как раз location ( точнее поле "area_area" в таблице "cms_page_widget_areas" ). Так  только создавать  для каждого шаблона bodyClasses

{{\IPS\Output::i()->bodyClasses[] = 'cms_display';}}
{{\IPS\Output::i()->bodyClasses[] = 'cms_listing';}}
и т.д.

и происывать прям блоках условия, правда есть недостаток, блоки кешировать нельзя.

 

Есть другой вариант. Отказаться от менеджера виджетов, а также от глобального сайдбара и прям в шаблонах создать места для блоков, включая сайдбар и вставлять блоки через {block="KEY"}

 

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

Share this post


Link to post
Share on other sites
Только что, kgb сказал:

Если речь идет о блоках pages, добавляемых  через менеджер виджетов, то стандатным средство это никак, я писал выше, что

а движек для определения места блока использует как раз location ( точнее поле "area_area" в таблице "cms_page_widget_areas" ). Так  только создавать  для каждого шаблона bodyClasses

{{\IPS\Output::i()->bodyClasses[] = 'cms_display';}}
{{\IPS\Output::i()->bodyClasses[] = 'cms_listing';}}
и т.д.

и происывать прям блоках условия, правда есть недостаток, блоки кешировать нельзя.

 

Есть другой вариант. Отказаться от менеджера виджетов, а также от глобального сайдбара и прям в шаблонах создать места для блоков, включая сайдбар и вставлять блоки через {block="KEY"}

 

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

как же радует что есть грамотные) Спасибо друг. И извини за былое))было дело как то гадость написал в твой адрес. 

И может насчет третьего напишешь,так сказать для общего познания.

Share this post


Link to post
Share on other sites
9 минут назад, andros0789 сказал:

И извини за былое))

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

 

13 минут назад, andros0789 сказал:

И может насчет третьего

Ну я тоже столкнулся с той же проблемой. Если на форумах на главной, в разделах и в темах можно показывать разные блоки, то для Pages везде показывается один, да его еще хрен удалишь)))))) (кстати, у кого проблема с удалением, простой способ - перемещаем в другоу место, например из сайдбара в хидер и тут же удаляем))). В то же время в режиме page bilder движек предусматривает создание кастомных мест для виджетов. Если открыть  шаблоны page_builder то мы увидем там, как пример для трех колонок

<div>
	<div class='ipsGrid ipsGrid_collapsePhone'>
		<div class='ipsGrid_span4'>
			{template="widgetContainer" group="pages" app="cms" params="'col1', $widgets, 'vertical'"}
		</div>
		<div class='ipsGrid_span4'>
			{template="widgetContainer" group="pages" app="cms" params="'col2', $widgets, 'vertical'"}
		</div>
		<div class='ipsGrid_span4'>
			{template="widgetContainer" group="pages" app="cms" params="'col3', $widgets, 'vertical'"}
		</div>
	</div>
</div>

Однако попытка создать создесть кастомный виджет контейнер в шаблонах при ручном режиме , например {template="widgetContainer" group="pages" app="cms" params="'MyCustomArea', $widgets, 'vertical'"} ни к чему не привела, не работает.

Выясням. Находим класс, который за это отвечает, он здесь /applications/cms/sources/Pages/Page.php и видим.

Для page_builder такой код

			if ( $this->type === 'builder' )
			{
				list( $group, $name, $key ) = explode( '__', $this->template );
				\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate('pages')->globalWrap( $nav, \IPS\cms\Theme::i()->getTemplate($group, 'cms', 'page')->$name( $this, $this->getWidgets() ), $this );
			}

Где getWidgets() как раз вытаскивает как стандартные так и кастомные места для виджетов.

Ну а для ручного режима код такой

			else
			{
				/* Populate \IPS\Output::i()->sidebar['widgets'] sidebar/header/footer widgets */
				$this->getWidgets();
				\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'pages', 'cms' )->globalWrap( $nav, $this->getHtmlContent(), $this );
			}

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

			else
			{
				/* Populate \IPS\Output::i()->sidebar['widgets'] sidebar/header/footer widgets */
				//$this->getWidgets(); //original
				\IPS\Output::i()->sidebar['widgets'] = $this->getWidgets();//custom widget area
				\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'pages', 'cms' )->globalWrap( $nav, $this->getHtmlContent(), $this );
			}

И упс, в жопу программеров от IPS? мы сами с ушами)))

Теперь мы шаблонах пишем, например 

{template="widgetContainer" group="global" app="core" params="'header_MyTemplate_Display', 'horizontal'"}

или 

{template="widgetContainer" group="global" app="core" params="'sidebar_MyTemplate_Display', 'vertical'"}

или для листинга 

{template="widgetContainer" group="global" app="core" params="'header_MyTemplate_Listing', 'horizontal'"}

Ну и т.д.

и получаем кастомное мето для виджета. Там, Прадва еще с css немного может придеться поработать, но это уже мелочи

Share this post


Link to post
Share on other sites

Маленький вопрос, как сокрашать вывод кол-ва комментов и просмотров?
{lang="num_views_with_number" pluralize="$record->record_views"}

{lang="num_comments" pluralize="$record->record_comments"}

Без слова ПРОСМОТРОв и КОММЕНТАРИЕВ. Просто цифры

Share this post


Link to post
Share on other sites
11 минут назад, andros0789 сказал:

а все понял)

{ $record->record_comments}  и {$record->record_views }

Это хорошо, Но на всякий случай, часто помогает вот это 

{{echo '<pre>';}}
{{print_r($record);}}
{{echo '</pre>';exit;}}

Что бы понять, что же там у нас в переменной $record (или $row или что там еще будет )

Share this post


Link to post
Share on other sites
Только что, kgb сказал:

Это хорошо, Но на всякий случай, часто помогает вот это 

{{echo '<pre>';}}
{{print_r($record);}}
{{echo '</pre>';exit;}}

Что бы понять, что же там у нас в переменной $record (или $row или что там еще будет )

Воу крутяк! Осталось научиться мне теперь условия составлять)))

Share this post


Link to post
Share on other sites
В 14.04.2017 в 23:04, kgb сказал:

 

В 14.04.2017 в 13:17, andros0789 сказал:

Как например в GlobalTemplate прописать , а точнее скрыть например <div class="1"></div> на форумах, а показать на страницах?

А в чем проблема?

<div class="1 ipsHide"></div>

Не будет показываться нигде

а в css прописываем

body[data-pageapp="cms"] .1 {
	display: block;
}

Вариант 2 - еще лучше/ Через переменную $location , которая в GlobalTemplate есть.

{{if $location['app'] == 'cms'}}
	<div class="1"></div>
{{endif}}

 

В 14.04.2017 в 13:17, andros0789 сказал:

Или скрыть на страницах, а показать в полной новости на этих страницах?

Здесь сложнее, т.к. и $location['app']  и $location['module']  будут одинаковыми. Но есть  выход, называется bodyClasses .

В шаблоне  страницы record.phtml добавляем bodyClasses, например вот так 

{{\IPS\Output::i()->bodyClasses[] = 'fullNews';}}

И тогда у нас body уже имеет доп. класс fullNews / Соот-но или через css  body.fullNews или чекркз проверку существования класса

{{if !in_array('fullNews', \IPS\Output::i()->bodyClasses )}}

блаблабла

{{endif}}

 

Вот и встал вопрос на этом месте у меня)
Прописываю я в класс {{\IPS\Output::i()->bodyClasses[] = 'fullNews';}} в настройках содержимого страницы, где у мен свой шаблон. Прописываю условия что идут ниже в твоем примере. Но как определить что я нахожусь в полной новости то?))Вопрос)
Убирает блоки на главной и в полной новости, а надо как то ему прописать что только в полной новости)

Share this post


Link to post
Share on other sites

Совет нужен) Если я в шаблон полной новости пропишу скрипт с добавлением класса в body

<script>
        $("#default-body").addClass("fullNews");    
</script>

А после этого пропишу вместо 

{{\IPS\Output::i()->bodyClasses[] = 'fullNews';}}

Свое условие на проверку класса через hasClass в <body class="fullNews"> для удаления ненужных блоков в полной новости. Нормально будет как думаете знатоки?

Share this post


Link to post
Share on other sites
2 часа назад, andros0789 сказал:

Если я в шаблон полной новости пропишу скрипт с добавлением класса в body

Зачем плодить сущности и засорять шаблон скриптом, если  {{\IPS\Output::i()->bodyClasses[] = 'fullNews';}} добавит класс  fullNews в боди?

Share this post


Link to post
Share on other sites
50 минут назад, kgb сказал:

Зачем плодить сущности и засорять шаблон скриптом, если  {{\IPS\Output::i()->bodyClasses[] = 'fullNews';}} добавит класс  fullNews в боди?

Хорошая конструкция для больших кастомных проектов. 

Share this post


Link to post
Share on other sites
2 часа назад, kgb сказал:

Зачем плодить сущности и засорять шаблон скриптом, если  {{\IPS\Output::i()->bodyClasses[] = 'fullNews';}} добавит класс  fullNews в боди?

Ну прописал я  {{\IPS\Output::i()->bodyClasses[] = 'fullNews';}}  в боди в шаблоне страницы, а дальше то что???  Как мне показать свой шаблон полной новости? В этом то и вся беда. Мне нужно в полной новости убрать половину кода ведь. Поэтому и не пойму как убрать с помощью скрипта, точнее добавить скриптом. Прописав скрипт в шаблон полной новости, а в шаблоне страницы прописать в ненужные (блоки которые не нужны в фуллстори) условие.... Как условие прописать, если в классе боди есть fuulNews то не показывать этот блок?

{{\IPS\Output::i()->bodyClasses[] = 'fullNews';}} не катит... Так как класс добавляется скриптом.

Как в IPS с помощью  hasClass сделать проверку класса боди?

Share this post


Link to post
Share on other sites
5 минут назад, Respected сказал:
{{if in_array('МОЙКЛАСС', \IPS\Output::i()->bodyClasses )}}
  Класс имеется
  {{else}}
Класса нет
  {{endif}}

 

То есть получается тут нет такого понятия, если есть класс вывести, если нет то не вывести?)) Я имею ввиду, придется два раза код прописывать

{{if in_array('fullNews', \IPS\Output::i()->bodyClasses )}}
                     <section class="promo-strip span12">
                        <ul class="promo-strip__list row ">
                           {block="newstop4"}
                        </ul>
                     </section>
					{{else}} 

К примеру надо убрать этот блок в полной новости. Вот как его показать на главной в Страницах и убрать в полной новости? то ли я че то не то делаю, то ли хз

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×