Форум русской поддержки Joomla!® CMS
21.02.2017, 11:36:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

[Решено] Определить наличие избранных материалов

 (Прочитано 4231 раз)
0 Пользователей и 1 Гость смотрят эту тему.
AlekVolsk
Профи
********

Репутация: +324/-3
Offline Offline

Пол: Мужской
Сообщений: 6613



« : 20.12.2013, 12:15:53 »

В общем, Собственно, сабж.

Поясню подробнее. В шаблоне есть кусок кода:
Код:
<?php defined('_JEXEC') or die;
if($this->countModules('left and right') == 0) $contentwidth = "_full";
if($this->countModules('left or right') == 1) $contentwidth = "_middle";
if($this->countModules('left and right') == 1) $contentwidth = "_small";
?>
...
Код:
     <div class="jr_component">
        <!-- Left -->
        <?php if($this->countModules('left')) : ?>
          <div class="jr_left">
            <jdoc:include type="modules" name="left" style="xhtml" />
          </div>
        <?php endif; ?>
        <!-- short/middle/full) -->
        <div class="jr<?php echo $contentwidth; ?>">
          <jdoc:include type="component" />
        </div>
        <!-- Rigth -->
        <?php if($this->countModules('right')) : ?>
          <div class="jr_right">
            <jdoc:include type="modules" name="right" style="xhtml" />
          </div>
        <?php endif; ?>
        <div class="clr"></div>
      </div>

Так вот:если в позиции left и right ничего нет, и при этом в "jr<?php echo $contentwidth; ?>" тоже ничего не выводится (например, на главной странице избранные материалы – если они отсутствуют, то в "jr<?php echo $contentwidth; ?>" пусто), то "jr_component" вообще показывать не надо.

Как-либо можно такое реализовать?
« Последнее редактирование: 22.12.2013, 14:45:08 от b2z » Записан
rudakoff
Захожу иногда
**

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 20



« Ответ #1 : 20.12.2013, 12:21:12 »

Предлагаю такую реализацию:
Код:
        <!-- short/middle/full) -->
        <?php if(!empty($contentwidth)) {?>
        <div class="jr<?php echo $contentwidth; ?>">
          <jdoc:include type="component" />
        </div>
        <?php } ?>
        <!-- Rigth -->
Записан
AlekVolsk
Профи
********

Репутация: +324/-3
Offline Offline

Пол: Мужской
Сообщений: 6613



« Ответ #2 : 20.12.2013, 12:32:17 »

Увы. Необходимо скрыть весь jr_component.
left и right сейчас пусты, $contentwidht = _full, соответственно, выводится jr_full, причем пустой. Даже если пишу
Код:
      <?php if(!empty($contentwidth) and ($this->countModules('left and right') == 0)) : ?>
        <div class="jr_component">
        ...
        </div>
      <?php endif; ?>
все равно выводится.
Записан
b2z
Support Team
*****

Репутация: +720/-0
Offline Offline

Пол: Мужской
Сообщений: 7606


Разраблю понемногу


« Ответ #3 : 20.12.2013, 13:50:12 »

Блин, что-то ничего толкового в голову не приходит... Может через JS как-то? Ну типа проверять наличие определенного id/класса на странице, и если его нет, то не отображать? Правда, если страница будет долго подгружаться, то некрасиво будет.

А с PHP тут вроде никак - компонент инклюдится отдельно.
Записан
rudakoff
Захожу иногда
**

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 20



« Ответ #4 : 20.12.2013, 14:04:09 »

Код:
print_r($this);
можете показать?
Записан
AlekVolsk
Профи
********

Репутация: +324/-3
Offline Offline

Пол: Мужской
Сообщений: 6613



« Ответ #5 : 20.12.2013, 19:25:07 »

Не совсем понятно, куда надо воткнуть print_r($this);
Вставил так:
Код:
      <?php if(!empty($contentwidth) and ($this->countModules('left and right') == 0)) : ?>
        <?php print_r($this);?>
        <div class="jr_component">
        ...
        </div>
      <?php endif; ?>

получил на выходе перед показом jr_component:
Код:
JDocumentHTML Object ( [_links] => Array ( [http://ostrovok.local/] => Array ( [relation] => canonical [relType] => rel [attribs] => Array ( ) ) [/?format=feed&type=rss] => Array ( [relation] => alternate [relType] => rel [attribs] => Array ( [type] => application/rss+xml [title] => RSS 2.0 ) ) [/?format=feed&type=atom] => Array ( [relation] => alternate [relType] => rel [attribs] => Array ( [type] => application/atom+xml [title] => Atom 1.0 ) ) ) [_custom] => Array ( ) [template] => kindersuite [baseurl] => [params] => JRegistry Object ( [data:protected] => stdClass Object ( ) ) [_file] => Z:\home\ostrovok.local\www/templates/kindersuite/index.php [_template:protected] => [_template_tags:protected] => Array ( ) [_caching:protected] => [_html5:JDocumentHTML:private] => [title] => Детский сад №20 «Островок» г. Вольск - Главная [description] => Официальный сайт дошкольного образовательного учреждения (демонстрационная версия) [link] => [base] => http://ostrovok.local/ [language] => ru-ru [direction] => ltr [_generator] => Joomla! - Open Source Content Management [_mdate] => [_tab] => [_lineEnd] => [_charset] => utf-8 [_mime] => text/html [_namespace] => [_profile] => [_scripts] => Array ( [/media/system/js/mootools-core.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/media/system/js/core.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/media/system/js/mootools-more.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/media/plg_system_topofthepage/ScrollSpy-yui-compressed.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/media/plg_system_topofthepage/smoothscroll.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/media/plg_system_topofthepage/topofthepage.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/components/com_jcomments/js/jcomments-v2.3.js?v=12] => Array ( [mime] => text/javascript [defer] => [async] => ) [/components/com_jcomments/libraries/joomlatune/ajax.js?v=4] => Array ( [mime] => text/javascript [defer] => [async] => ) [/media/jui/js/jquery.min.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/media/jui/js/jquery-noconflict.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/media/jui/js/jquery-migrate.min.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/media/system/js/tabs-state.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/media/system/js/caption.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/media/jui/js/bootstrap.min.js] => Array ( [mime] => text/javascript [defer] => [async] => ) ) [_script] => Array ( [text/javascript] => window.plg_system_topofthepage_options = {"buttontext":false,"version":"3","scrollspy":"200","opacity":"100","styles":{"opacity":0,"position":"fixed","display":"block","bottom":"0px","right":"0px"},"topalways":true,"smoothscroll":{"duration":"200","transition":"linear"}}; jQuery(window).on('load', function() { new JCaption('img.caption'); }); ) [_styleSheets] => Array ( [/components/com_jcomments/tpl/default/style.css?v=30] => Array ( [mime] => text/css [media] => [attribs] => Array ( ) ) [/templates/kindersuite/css/bootstrap.css] => Array ( [mime] => text/css [media] => [attribs] => Array ( ) ) [/templates/kindersuite/css/template.css] => Array ( [mime] => text/css [media] => [attribs] => Array ( ) ) ) [_style] => Array ( [text/css] => #gototop { margin-right: 20px; width: 41px; height: 28px; background:url(/media/plg_system_topofthepage/images/gotop.png) no-repeat scroll right top transparent; transition:all 0.5s ease-out 0s; zoom:1; cursor: pointer; z-index: 9999; } #gototop:hover { background-position: left bottom; } ) [_metaTags] => Array ( [http-equiv] => Array ( [content-type] => text/html; charset=utf-8 ) [standard] => Array ( [keywords] => [rights] => ) ) [_engine] => [_type] => HTML [mediaVersion:protected] => b9242e4e40653896ef878e428f5dfad9 )
Записан
AlekVolsk
Профи
********

Репутация: +324/-3
Offline Offline

Пол: Мужской
Сообщений: 6613



« Ответ #6 : 21.12.2013, 10:29:03 »

$contentwidth по логике вещей пустым быть не может:
Код
if($this->countModules('left and right') == 0) $contentwidth = "_full";
if($this->countModules('left or right') == 1) $contentwidth = "_middle";
if($this->countModules('left and right') == 1) $contentwidth = "_small";

if(!empty('jr_'.$contentwidth) тоже не срабатывает

опух уже xD
Записан
b2z
Support Team
*****

Репутация: +720/-0
Offline Offline

Пол: Мужской
Сообщений: 7606


Разраблю понемногу


« Ответ #7 : 21.12.2013, 11:28:40 »

Мне кажется, тут только как я предложил...
Записан
AlekVolsk
Профи
********

Репутация: +324/-3
Offline Offline

Пол: Мужской
Сообщений: 6613



« Ответ #8 : 21.12.2013, 11:43:36 »

Пичаль, однаконама...
С js не очень дружен, придется постоянно что-то ставить в избранное. Всем спс за помощь. Ну или хотя бы за ее попытку Azn
Записан
Shustry
Группа развития
*****

Репутация: +729/-3
Offline Offline

Пол: Мужской
Сообщений: 6669


Рисую дизайны


« Ответ #9 : 21.12.2013, 14:24:18 »

Код
$document = JFactory::getDocument();
$buf = strlen(strip_tags($document->getBuffer(component)));
 
if ($buf > 0) {
//что-то на главной есть
} else {
//пусто
}
 

Записан
b2z
Support Team
*****

Репутация: +720/-0
Offline Offline

Пол: Мужской
Сообщений: 7606


Разраблю понемногу


« Ответ #10 : 21.12.2013, 15:20:46 »

Код
$document = JFactory::getDocument();
$buf = strlen(strip_tags($document->getBuffer(component)));
 
if ($buf > 0) {
//что-то на главной есть
} else {
//пусто
}
 


Тогда уж
Код
$document->getBuffer('component')


Кстати, $buf > 0 - оно нормально работает? Что там возвращается при $document->getBuffer('component') ?
Записан
AlekVolsk
Профи
********

Репутация: +324/-3
Offline Offline

Пол: Мужской
Сообщений: 6613



« Ответ #11 : 21.12.2013, 15:37:01 »

вывод print_r($doc->getBuffer('component')): если 'component' пуст. ничего не выводит, если что-то есть, выводит содержимое с соблюдением разметки и стилей.

Код
$buf = strlen(strip_tags($doc->getBuffer(component)));
print_r($buf);

на выходе 6, все шесть символов: #0A
« Последнее редактирование: 21.12.2013, 15:51:01 от AlekVolsk » Записан
AlekVolsk
Профи
********

Репутация: +324/-3
Offline Offline

Пол: Мужской
Сообщений: 6613



« Ответ #12 : 21.12.2013, 15:59:05 »

выставил if($buf > 10), вряд ли контент вместе с разметкой может содержать меньше 10 символов, хотя такое решение не есть хорошо.
Записан
Shustry
Группа развития
*****

Репутация: +729/-3
Offline Offline

Пол: Мужской
Сообщений: 6669


Рисую дизайны


« Ответ #13 : 21.12.2013, 16:20:34 »

Тогда уж
Код
$document->getBuffer('component')


Кстати, $buf > 0 - оно нормально работает? Что там возвращается при $document->getBuffer('component') ?
Возвращает пустые тэги-обёртки из шаблона компонента, потому strip_tags сделал.
выставил if($buf > 10), вряд ли контент вместе с разметкой может содержать меньше 10 символов, хотя такое решение не есть хорошо.
Что нехорошего в этом решении?
Записан
AlekVolsk
Профи
********

Репутация: +324/-3
Offline Offline

Пол: Мужской
Сообщений: 6613



« Ответ #14 : 21.12.2013, 16:34:20 »

по хорошему, надо исключить даже эти 6 символов #0A, откуда они, кстати7
Записан
Shustry
Группа развития
*****

Репутация: +729/-3
Offline Offline

Пол: Мужской
Сообщений: 6669


Рисую дизайны


« Ответ #15 : 21.12.2013, 16:40:55 »

Ну у меня их нет, откуда ж мне знать? Azn Смотрите:
1. Наличие альтернативных шаблонов в корне вашего шаблона
2. Разметку ком_контента в папке HTML своего шаблона
Записан
Shustry
Группа развития
*****

Репутация: +729/-3
Offline Offline

Пол: Мужской
Сообщений: 6669


Рисую дизайны


« Ответ #16 : 21.12.2013, 16:42:55 »

Тогда уж
Код
$document->getBuffer('component')

Кстати, $buf > 0 - оно нормально работает? Что там возвращается при $document->getBuffer('component') ?
У меня без экранирования, кстати, работает. Забыл про скобки ординарные. Прям так и работает:
Код
$buf = strlen(strip_tags($document->getBuffer(component)));
Записан
AlekVolsk
Профи
********

Репутация: +324/-3
Offline Offline

Пол: Мужской
Сообщений: 6613



« Ответ #17 : 21.12.2013, 16:55:06 »

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

Репутация: +729/-3
Offline Offline

Пол: Мужской
Сообщений: 6669


Рисую дизайны


« Ответ #18 : 21.12.2013, 17:01:40 »

Проверил, на стандартном выводится 6, если:
Код
$buf = strlen(strip_tags($document->getBuffer(component)));
Если:
Код
$buf = $document->getBuffer(component);
, то выводится:
string '<div class="blog-featured"></div>

Проверяю с помощью var_dump ($buf);

<div class="blog-featured"></div> находится в
com_content\views\featured\tmpl\default.php

Рабочее решение написано ещё шесть сообщений назад. Даже не знаю, чем ещё помочь. Дайте доступ FTP, сам внедрю.
Записан
AlekVolsk
Профи
********

Репутация: +324/-3
Offline Offline

Пол: Мужской
Сообщений: 6613



« Ответ #19 : 21.12.2013, 17:21:48 »

убрал <div class="blog-featured<?//php echo $this->pageclass_sfx;?>">  - не помогло.
jr_component и jr<?php echo $contentwidth; ?> имеют в стилях margin и padding, возможно из-за этого.
остановлюсь на решении if($buf > 10), меня устраивает.

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

спс за помощь. +
Записан
Shustry
Группа развития
*****

Репутация: +729/-3
Offline Offline

Пол: Мужской
Сообщений: 6669


Рисую дизайны


« Ответ #20 : 21.12.2013, 17:43:53 »

Пожалуйста. Шесть этих символов — это переводы строк в стандартном шаблоне. Окончательное решение будет такое:

Код
$buf = strlen(trim(strip_tags($document->getBuffer(component))));

Теперь ноль.
Записан
AlekVolsk
Профи
********

Репутация: +324/-3
Offline Offline

Пол: Мужской
Сообщений: 6613



« Ответ #21 : 21.12.2013, 18:03:18 »

Wink
Записан
b2z
Support Team
*****

Репутация: +720/-0
Offline Offline

Пол: Мужской
Сообщений: 7606


Разраблю понемногу


« Ответ #22 : 21.12.2013, 18:52:56 »

getBuffer(component) - хоть это и работает, так делать нельзя. getBuffer('component') правильней и не надо приучаться к плохому стилю программирования.
Записан
Shustry
Группа развития
*****

Репутация: +729/-3
Offline Offline

Пол: Мужской
Сообщений: 6669


Рисую дизайны


« Ответ #23 : 21.12.2013, 19:21:13 »

Есть, шеф.
AlekVolsk, пишите:
Код
$buf = strlen(trim(strip_tags($document->getBuffer("component"))));
чтобы уж наверняка.
Записан
AlekVolsk
Профи
********

Репутация: +324/-3
Offline Offline

Пол: Мужской
Сообщений: 6613



« Ответ #24 : 21.12.2013, 22:10:38 »

Насколько мне известно, синтаксис php подразумевает одинарные кавычки.
Я привык к достаточно строгому синтаксису delphi (по сути, больше 20 лет на паскале), возможно, я просто чего-то не понимаю, но здесь мне несколько дико наблюдать, почему J позволяет подобные "махинации".
На всякий пожарный, одинарные кавычки поставил сразу. но работает и с двойными, и без них вообще.
Сказать, что я в шоке - ничего не сказать... но это уже отдельная тема, эта решена, большое спасибо Azn
« Последнее редактирование: 21.12.2013, 22:27:51 от AlekVolsk » Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet