andros0789

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

В теме 35 сообщений

ID: 1   Опубликовано (изменено)

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

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

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

 

И PS Не по теме:

Снимок.PNG

Изменено пользователем andros0789
удалил лишний тег

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кто же все таки подскажет? А то тема вниз ушла уже...:/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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 Не по теме:

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
13 часов назад, andros0789 сказал:

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

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

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

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

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

???????

 

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

andros0789 и Envy понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
18 минут назад, kgb сказал:

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


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

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


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

???????

 

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
9 минут назад, andros0789 сказал:

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

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

andros0789 понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, kgb сказал:

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

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

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

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

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

Снимок.PNG

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 минуты назад, andros0789 сказал:

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

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

 

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

andros0789 понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, kgb сказал:

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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"}

 

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

andros0789 понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, kgb сказал:

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

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


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

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

 

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

 

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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 немного может придеться поработать, но это уже мелочи

Silence и andros0789 понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
11 минут назад, andros0789 сказал:

а все понял)

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

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

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

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

alexxis и andros0789 понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, kgb сказал:

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


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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 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';}} в настройках содержимого страницы, где у мен свой шаблон. Прописываю условия что идут ниже в твоем примере. Но как определить что я нахожусь в полной новости то?))Вопрос)
Убирает блоки на главной и в полной новости, а надо как то ему прописать что только в полной новости)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, andros0789 сказал:

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

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

Respected понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
50 минут назад, kgb сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, kgb сказал:

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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}} 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!


Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.


Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу