[FAQ] Как спрятать вывод основного контента на главной

  • 39 Ответов
  • 29370 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

Kumigy

  • Захожу иногда
  • **
  • 21
  • 0
Доброго времени суток, Форумчане.
Подскажите пожалуйста как сделать так, что бы блок вывода контента был виден на всех страницах кроме главной?
« Последнее редактирование: 29.08.2013, 12:11:14 от b2z »

*

Aspik

  • Завсегдатай
  • *****
  • 543
  • 61
  • В личку не писать, не отвечу.
Доброго времени суток, Форумчане.
Подскажите пожалуйста как сделать так, что бы блок вывода контента был виден на всех страницах кроме главной?
Примерно так:

Код
$menu = & JSite::getMenu();

<?php if ($menu->getActive()!= $menu->getDefault()) {?>
        <jdoc:include type="component" />
<?php } ?>
Модули Joomla | Joomla extensions
- - - - - -
- - - - - -
Шаблоны Joomla
- - - - - -
- - - - - -

*

Kumigy

  • Захожу иногда
  • **
  • 21
  • 0
Примерно так:

Код
$menu = & JSite::getMenu();

<?php if ($menu->getActive()!= $menu->getDefault()) {?>
        <jdoc:include type="component" />
<?php } ?>

Извиняюсь за наглость, не мог бы ты объяснить, что есть что в этом кусочке. Хочется очень понимать что я делаю))) Я лишь только понял, что переменную меню сравниваем с дефолтовым меню и при успешном сравнении выводим контент.

*

Kumigy

  • Захожу иногда
  • **
  • 21
  • 0
<?php
$menu =& JSite::getMenu();
?>
<?php if ($menu->getActive()!= $menu->getDefault()) : ?>
<div id="content">
        <jdoc:include type="component" />
</div>
<?php endif ?>


вот так вот у меня заработало)

огромное спасибо

*

b2z

  • Support Team
  • *****
  • 7452
  • 741
  • Разраблю понемногу
Я лишь только понял, что переменную меню сравниваем с дефолтовым меню и при успешном сравнении выводим контент.
Так и есть ;) Чуток подправил код, для общего использования и добавил тему в J1.6 FAQ.

Код: php
<?php 
$menu = JSite::getMenu();
if ($menu->getActive()!= $menu->getDefault()): ?>
        // здесь выводим все, что не хотим показать на главной
<?php endif; ?>

*

kozovod

  • Захожу иногда
  • **
  • 14
  • 0
Добрый день.
А если наоборот, необходимо вывести контент только на главной странице, она же главная страница JoomShopping?
http://www.honda-tuning.net - аксессуары и доп оборудование для автомобилей Honda.

*

DaVinchy

  • Давно я тут
  • ****
  • 326
  • 39
А если наоборот, необходимо вывести контент только на главной странице, она же главная страница JoomShopping?
воскл. знак в коде уберите

*

Виталик

  • Группа развития
  • *****
  • 1216
  • 125
Код: php
<?php 
$menu = JSite::getMenu();
if ($menu->getActive()!= $menu->getDefault()): ?>
        // здесь выводим все, что не хотим показать на главной
<?php endif; ?>
а может лучше сравнивать только id: $menu->getActive()->id == $menu->getDefault()->id а не целые объекты?

*

b2z

  • Support Team
  • *****
  • 7452
  • 741
  • Разраблю понемногу
а может лучше сравнивать только id: $menu->getActive()->id == $menu->getDefault()->id а не целые объекты?

Да так будет более правильнее. Исправил код:

Код: php
<?php $menu = JSite::getMenu();
if ($menu->getActive()->id != $menu->getDefault()->id): ?>
        // здесь выводим все, что не хотим показать на главной
<?php endif; ?>


Код: php
<?php $menu = JSite::getMenu();
if ($menu->getActive()->id == $menu->getDefault()->id): ?>
        // здесь выводим все, что хотим показать на главной
<?php endif; ?>

*

Kumigy

  • Захожу иногда
  • **
  • 21
  • 0
Ребят, поясните пожалуйста,ну так для общего развития, чем второй вариант правильнее?

*

b2z

  • Support Team
  • *****
  • 7452
  • 741
  • Разраблю понемногу
В первом варианте мы сравниваем целые объекты (меню), а во втром варианте только свойсто id объектов (меню).

*

TerribleZ

  • Захожу иногда
  • **
  • 10
  • 0
Не срабатывает, если например находимся мы на главной странице и на главной, есть поиск - Нажимаем искать и Itemid остаётся тот же что и на главной. Или вывод модуля последних материалов(mod_articles_latest). Itemid - остаётся тот же, в ссылке меняется только id - новости.
И вообще не пойму что это за Itemid, к которому идёт привязка вывода позиций(я так понял)
« Последнее редактирование: 21.06.2011, 21:09:27 от TerribleZ »

*

b2z

  • Support Team
  • *****
  • 7452
  • 741
  • Разраблю понемногу
Itemid - это уникальный Id пункта меню. Видимо у Вас не на все разделы созданы пункты меню, поэтому он остается один и тот же.

*

TerribleZ

  • Захожу иногда
  • **
  • 10
  • 0
Конечно не на все. Я ж не буду создавать пункт меню на поиск если он у меня выводится в виде модуля. И не буду ж создавать меню для каждой вновь созданной новости.
Решил проблему так:
Код
<?php if (JRequest::getVar('view', null) == 'featured'): ?>
// здесь выводим все, что хотим показать на главной
<?php endif; ?>

*

b2z

  • Support Team
  • *****
  • 7452
  • 741
  • Разраблю понемногу
JRequest::getVar('view') == 'featured' - это проверка на страницу с избранными материалами. Если она у Вас главная, то все ок. Если же главаная другая страница, то этот код не сработает.

*

TerribleZ

  • Захожу иногда
  • **
  • 10
  • 0
Ещё проблема. Ставлю в настройке модуле "Привязка к пунктам меню" -> "Привязка модуля" -> "На всех страницах, кроме указанных" и выбираю не показывать когда пункт меню "Главная". Вроде всё ок.
НО! модуль также не отображается на тех страницах где нет никакой привязки к пунктам меню т.е. Itemid - не существует.
К примеру страница регистрации "site.ru/index.php?option=com_comprofiler&task=registers" или страница поиска "site.ru/index.php?searchword=слово&searchphrase=all&option=com_search".
Как решить эту проблему?

*

saturn

  • Захожу иногда
  • **
  • 19
  • 0

<?php $menu = JSite::getMenu();
if ($menu->getActive()->id != $menu->getDefault()->id): ?>
        // здесь выводим все, что не хотим показать на главной
<?php endif; ?>


Подскажите, пожалуйста, куда нужно это вставить?

*

TerribleZ

  • Захожу иногда
  • **
  • 10
  • 0
Подскажите, пожалуйста, куда нужно это вставить?
как вариант:
www\templates\название_вашего_шаблона_сайта\index.php

*

b2z

  • Support Team
  • *****
  • 7452
  • 741
  • Разраблю понемногу
Ещё проблема. Ставлю в настройке модуле "Привязка к пунктам меню" -> "Привязка модуля" -> "На всех страницах, кроме указанных" и выбираю не показывать когда пункт меню "Главная". Вроде всё ок.
НО! модуль также не отображается на тех страницах где нет никакой привязки к пунктам меню т.е. Itemid - не существует.
К примеру страница регистрации "site.ru/index.php?option=com_comprofiler&task=registers" или страница поиска "site.ru/index.php?searchword=слово&searchphrase=all&option=com_search".
Как решить эту проблему?
Как вариант - создать меню (которое нигде не будет выводится), и в нем сделать пункты для index.php?option=com_comprofiler&task=registers и index.php?searchword=слово&searchphrase=all&option=com_search

*

TerribleZ

  • Захожу иногда
  • **
  • 10
  • 0
Как вариант - создать меню (которое нигде не будет выводится), и в нем сделать пункты для index.php?option=com_comprofiler&task=registers и index.php?searchword=слово&searchphrase=all&option=com_search

Это не есть решение проблемы, так как таких ссылок на сайте будет добавляться больше в зависимости от расширения возможностей(добавления новых компонентов) сайта. К примеру вот ещё сылки index.php?option=com_comprofiler&task=lostpassword (ввостановление пароля) или index.php?option=com_some_component&view=events(какой-то компонент).

Ваши предложения? Буду очень благодарен.


*

czp

  • Новичок
  • *
  • 6
  • 0
Извеняюсь что пишу в этой теме, но что бы новую не создавтаь решил в похожей, есле что могу новую, подскажите как сделать что бы:
1.Когда заходит админ на сайт он видел БЛОК1 и в нем спрятаную инфу
2.А когда заходит модератор или кто то ниже с рангом, то он видит БЛОК2 а БЛОК1 он не видит?
3.Ну и естественно обычные бзеры не видят БЛОК1 и БЛОК2
я так понял там PHP код с доступом, типа аккес ну там ненмого поглядел в коде Joomla но сам не знаю как сделать подскажите как написать код

*

DaVinchy

  • Давно я тут
  • ****
  • 326
  • 39
czp, здесь посмотрите

*

czp

  • Новичок
  • *
  • 6
  • 0
ну не фурычит вот так написал, пробовал вместо администратора писать ник всеровно не фурычит, может из за того что Joomla 1,6 а там бы мануал на 1,5?

Код
<?php
$user =& JFactory::getUser();
?>
<?php if($user-> Administrator) : ?>
<div class="tos">

</div>
<?php endif ?>

перепробовал все доступные там комбинации не робит, помогите ! :(
« Последнее редактирование: 09.07.2011, 02:04:46 от czp »

*

b2z

  • Support Team
  • *****
  • 7452
  • 741
  • Разраблю понемногу
В 1.6+ группы можно переименовывать. Поэтому проверку лучше делать по ID группы. По умолчанию администратор находится в группе Super Users и ID этой группы 8. Проверить можно так:

Код: php
<?php
$user = JFactory::getUser();
if ( in_array( 8, $user->groups ) ) : ?>
Здесь выводим блок для Super Users.
<?php endif; ?>

Посмотреть ID групп можно в Менеджер пользователей -> Группы пользователей.

*

czp

  • Новичок
  • *
  • 6
  • 0
заработало,благодарю)) еше такой вопрос есле можно, есть что то типа jcoments на  1.6  а то тот модуль только с 1,5 робит а мне нужны, коменты подскажите есле не сложно

*

b2z

  • Support Team
  • *****
  • 7452
  • 741
  • Разраблю понемногу
заработало,благодарю)) еше такой вопрос есле можно, есть что то типа jcoments на  1.6  а то тот модуль только с 1,5 робит а мне нужны, коменты подскажите есле не сложно
Читаем Правила форума! Одна тема = один вопрос!

*

TerribleZ

  • Захожу иногда
  • **
  • 10
  • 0
А что я могу предложить? Так работает Joomla...
Решил свою проблему. Вроде бы правильно.
Т.е. если нам нужно вывести модуль везде кроме выбранных страниц(параметр "Все, кроме выбранных"). Т.е. независимо существует ItemId или нет(есть привязка к меню или нет).
Нужно в файле \libraries\joomla\application\module\helper.php
Добавить строку после строчек 317-318, чтоб было так:
Код
$negHit	= ($negId === (int) $module->menuid)
|| (!$negId && (int)$module->menuid < 0);
if (!$negId && $module->menuid <0) {$negHit = 0;}



« Последнее редактирование: 11.07.2011, 19:38:49 от TerribleZ »

*

nik_neman

  • Осваиваюсь на форуме
  • ***
  • 52
  • 2
Спасибо. То что искал.
« Последнее редактирование: 18.01.2012, 16:46:03 от nik_neman »

*

wfedin

  • Живу я здесь
  • ******
  • 1290
  • 102
Нашёл решение от:
Код: php-brief
<?php if (JURI::current() == JURI::base()) : ?>
<jdoc:include type="modules" name="имя позици модуля ваше" />
<?php endif; ?>
На данный момент лучший вариант проверки на главную
вставлять в файл шаблона отвечающий за вывод модулей. Обычно index.php
В клубных шаблонах ищите в папке layouts обычно
Хотелось бы понять достоинства и возможные недостатки обоих подходов