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

AlekVolsk

  • Профи
  • 6357
  • 346 / 4
В общем, Собственно, сабж.

Поясню подробнее. В шаблоне есть кусок кода:
Код
<?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

  • Захожу иногда
  • 20
  • 1 / 0
Предлагаю такую реализацию:
Код
        <!-- short/middle/full) -->
        <?php if(!empty($contentwidth)) {?>
        <div class="jr<?php echo $contentwidth; ?>">
          <jdoc:include type="component" />
        </div>
        <?php } ?>
        <!-- Rigth -->
Возможно, Вы думаете, что можете написать программу сами. Но это вовсе не означает, что это так и есть на самом деле.
*

AlekVolsk

  • Профи
  • 6357
  • 346 / 4
Увы. Необходимо скрыть весь 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
  • 7515
  • 749 / 0
  • Разраблю понемногу
Блин, что-то ничего толкового в голову не приходит... Может через JS как-то? Ну типа проверять наличие определенного id/класса на странице, и если его нет, то не отображать? Правда, если страница будет долго подгружаться, то некрасиво будет.

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

rudakoff

  • Захожу иногда
  • 20
  • 1 / 0
Код
print_r($this);
можете показать?
Возможно, Вы думаете, что можете написать программу сами. Но это вовсе не означает, что это так и есть на самом деле.
*

AlekVolsk

  • Профи
  • 6357
  • 346 / 4
Не совсем понятно, куда надо воткнуть 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

  • Профи
  • 6357
  • 346 / 4
$contentwidth по логике вещей пустым быть не может:
Код: php
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
*

AlekVolsk

  • Профи
  • 6357
  • 346 / 4
Пичаль, однаконама...
С js не очень дружен, придется постоянно что-то ставить в избранное. Всем спс за помощь. Ну или хотя бы за ее попытку :)
*

Shustry

  • Группа развития
  • 6436
  • 738 / 3
  • Рисую дизайны
Код: php
$document = JFactory::getDocument();
$buf = strlen(strip_tags($document->getBuffer(component)));

if ($buf > 0) {
//что-то на главной есть
} else {
//пусто
}

Бесплатно консультирую по дизайну и вёрстке (только в личку сердечно прошу не стучать). Платно делаю дизайн, вёрстку и темплейты для Joomla. Работаю только за деньги. За большие. И долго. Но качественно.
---------------------------------------------------------
xmpp:joomla@conference.jabber.ru - наша конфа!
*

b2z

  • Support Team
  • 7515
  • 749 / 0
  • Разраблю понемногу
Код: php
$document = JFactory::getDocument();
$buf = strlen(strip_tags($document->getBuffer(component)));

if ($buf > 0) {
//что-то на главной есть
} else {
//пусто
}


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


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

AlekVolsk

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

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

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

AlekVolsk

  • Профи
  • 6357
  • 346 / 4
выставил if($buf > 10), вряд ли контент вместе с разметкой может содержать меньше 10 символов, хотя такое решение не есть хорошо.
*

Shustry

  • Группа развития
  • 6436
  • 738 / 3
  • Рисую дизайны
Тогда уж
Код: php
$document->getBuffer('component')


Кстати, $buf > 0 - оно нормально работает? Что там возвращается при $document->getBuffer('component') ?
Возвращает пустые тэги-обёртки из шаблона компонента, потому strip_tags сделал.
выставил if($buf > 10), вряд ли контент вместе с разметкой может содержать меньше 10 символов, хотя такое решение не есть хорошо.
Что нехорошего в этом решении?
Бесплатно консультирую по дизайну и вёрстке (только в личку сердечно прошу не стучать). Платно делаю дизайн, вёрстку и темплейты для Joomla. Работаю только за деньги. За большие. И долго. Но качественно.
---------------------------------------------------------
xmpp:joomla@conference.jabber.ru - наша конфа!
*

AlekVolsk

  • Профи
  • 6357
  • 346 / 4
по хорошему, надо исключить даже эти 6 символов #0A, откуда они, кстати7
*

Shustry

  • Группа развития
  • 6436
  • 738 / 3
  • Рисую дизайны
Ну у меня их нет, откуда ж мне знать? :) Смотрите:
1. Наличие альтернативных шаблонов в корне вашего шаблона
2. Разметку ком_контента в папке HTML своего шаблона
Бесплатно консультирую по дизайну и вёрстке (только в личку сердечно прошу не стучать). Платно делаю дизайн, вёрстку и темплейты для Joomla. Работаю только за деньги. За большие. И долго. Но качественно.
---------------------------------------------------------
xmpp:joomla@conference.jabber.ru - наша конфа!
*

Shustry

  • Группа развития
  • 6436
  • 738 / 3
  • Рисую дизайны
Тогда уж
Код: php
$document->getBuffer('component')

Кстати, $buf > 0 - оно нормально работает? Что там возвращается при $document->getBuffer('component') ?
У меня без экранирования, кстати, работает. Забыл про скобки ординарные. Прям так и работает:
Код: php
$buf = strlen(strip_tags($document->getBuffer(component)));
Бесплатно консультирую по дизайну и вёрстке (только в личку сердечно прошу не стучать). Платно делаю дизайн, вёрстку и темплейты для Joomla. Работаю только за деньги. За большие. И долго. Но качественно.
---------------------------------------------------------
xmpp:joomla@conference.jabber.ru - наша конфа!
*

AlekVolsk

  • Профи
  • 6357
  • 346 / 4
альтернативных шаблонов нет, даже если com_content вырезаю, тоже самое кажет, на чистой системе.
шаблон сам с нуля рисую, могу показать.
*

Shustry

  • Группа развития
  • 6436
  • 738 / 3
  • Рисую дизайны
Проверил, на стандартном выводится 6, если:
Код: php
$buf = strlen(strip_tags($document->getBuffer(component)));
Если:
Код: php
$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, сам внедрю.
Бесплатно консультирую по дизайну и вёрстке (только в личку сердечно прошу не стучать). Платно делаю дизайн, вёрстку и темплейты для Joomla. Работаю только за деньги. За большие. И долго. Но качественно.
---------------------------------------------------------
xmpp:joomla@conference.jabber.ru - наша конфа!
*

AlekVolsk

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

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

спс за помощь. +
*

Shustry

  • Группа развития
  • 6436
  • 738 / 3
  • Рисую дизайны
Пожалуйста. Шесть этих символов — это переводы строк в стандартном шаблоне. Окончательное решение будет такое:

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

Теперь ноль.
Бесплатно консультирую по дизайну и вёрстке (только в личку сердечно прошу не стучать). Платно делаю дизайн, вёрстку и темплейты для Joomla. Работаю только за деньги. За большие. И долго. Но качественно.
---------------------------------------------------------
xmpp:joomla@conference.jabber.ru - наша конфа!
*

AlekVolsk

  • Профи
  • 6357
  • 346 / 4
*

b2z

  • Support Team
  • 7515
  • 749 / 0
  • Разраблю понемногу
getBuffer(component) - хоть это и работает, так делать нельзя. getBuffer('component') правильней и не надо приучаться к плохому стилю программирования.
*

Shustry

  • Группа развития
  • 6436
  • 738 / 3
  • Рисую дизайны
Есть, шеф.
AlekVolsk, пишите:
Код: php
$buf = strlen(trim(strip_tags($document->getBuffer("component"))));
чтобы уж наверняка.
Бесплатно консультирую по дизайну и вёрстке (только в личку сердечно прошу не стучать). Платно делаю дизайн, вёрстку и темплейты для Joomla. Работаю только за деньги. За большие. И долго. Но качественно.
---------------------------------------------------------
xmpp:joomla@conference.jabber.ru - наша конфа!
*

AlekVolsk

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