Новости Joomla

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

lomrm

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Как сделать проверку
« : 29.04.2012, 17:04:25 »
Вопрос кто знает как сделать такую вещь


у странице есть 3 Блока

Левой блок(ширина 30%) / Центральный блок (ширина 40%) / Правый блок (ширина 30%)

нужно сделать так что ели нету Левого блока то Центральный увеличивается (ширина 70%) при этом если есть Правый блок
а если нету Правого блока то Центральный тоже (ширина 70%) при этом если есть Левый блок

ну а если нету не Левого блока не Правого блока то Центральный блок становится (ширина 100%)

вот ниже приведу пример я нашёл как сделать если нужно обрабатывать только Правый блок

Этот код я ставлю вокруг Центрального блока
----------------------------------------------
<div id="<?php echo $showRightColumn ? 'content2' : 'content'; ?>">
<jdoc:include type="component" />
</div>

Этот код я ставлю вокруг Правого блока
----------------------------------------------
<?php if ($showRightColumn) : ?>
<jdoc:include type="modules" name="position-righrt" style="none" />
</div>


теперь если Правый блок есть то у Центрального блока будет вот так id="content" если Правого блока нет то будет так id="content2"

==================================

но тут пример только на 1 блок
а как сделать так же на проверку и вывод и Левого и Правого блока? подскажите пожалуйста
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Re: Как сделать проверку
« Ответ #1 : 29.04.2012, 18:53:58 »
Код: php
<?php

// No direct access.
defined('_JEXEC') or die;


$left = $this->countModules('left');
$right = $this->countModules('right');

$pageClass = ($left && $right)? 'two-sidebars' : ($left || $right)? 'one-sidebar' : 'no-sidebar';

?>
...
<body class="<?php echo $pageClass ?>">
...
</body>
...

Код: css
.one-sidebar #content{
    width: 70%;
}
.two-sidebars #content{
    width: 50%;
}
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

lomrm

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: Как сделать проверку
« Ответ #2 : 29.04.2012, 19:08:57 »
Код: php
<?php

// No direct access.
defined('_JEXEC') or die;


$left = $this->countModules('left');
$right = $this->countModules('right');

$pageClass = ($left && $right)? 'two-sidebars' : ($left || $right)? 'one-sidebar' : 'no-sidebar';

?>
...
<body class="<?php echo $pageClass ?>">
...
</body>
...

Код: css
.one-sidebar #content{
    width: 70%;
}
.two-sidebars #content{
    width: 50%;
}

вопрос, а что тут должно получится?? не могу разобратся. подскажи пожалуйста
*

lomrm

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: Как сделать проверку
« Ответ #3 : 29.04.2012, 19:11:15 »
как я понял что тут получается так. если нету Блока left и right то сонтент во всю ширину. а если есть то нет или??
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Re: Как сделать проверку
« Ответ #4 : 29.04.2012, 19:44:45 »
А что тут понимать?
класс = оба_блока ? 'один_сайдбар' ИНАЧЕ один_из_блоков ? 'один_сайдбар' ИНАЧЕ 'без_сайдбаров';

если один блок - то width 70%
если оба - то width 50%
если ни одного - то width auto

Я вот только не уверен что в php цепочка условий будет проверяться в таком порядке в котором задумано. По крайней мере в javascript класс получится верный.
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

lomrm

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: Как сделать проверку
« Ответ #5 : 29.04.2012, 19:57:23 »
А что тут понимать?
класс = оба_блока ? 'один_сайдбар' ИНАЧЕ один_из_блоков ? 'один_сайдбар' ИНАЧЕ 'без_сайдбаров';

если один блок - то width 70%
если оба - то width 50%
если ни одного - то width auto

Я вот только не уверен что в php цепочка условий будет проверяться в таком порядке в котором задумано. По крайней мере в javascript класс получится верный.

спасибо я нашел другое решение вроде работает . но там больше кода твой кусок еще покручу попробую разабратся

вот что я сделал
-----------------

<div id="box-content">
      <?php if($this->countModules('left')) : ?>
      <div id="left">
        <jdoc:include type="modules" name="left" style="xhtml" />
      </div>
      <?php endif; ?>
     
      <?php if($this->countModules('left and right')) : ?>
      <div id="content">
        <jdoc:include type="component" />
      </div>
      <?php else : ?>
      <?php if($this->countModules('left')) : ?>
      <div id="content_no_right">
        <jdoc:include type="component" />
      </div>
      <?php else : ?>
      <?php if($this->countModules('right')) : ?>
      <div id="content_no_left">
        <jdoc:include type="component" />
      </div>
      <?php else : ?>
      <div id="content_no_modules">
        <jdoc:include type="component" />
      </div>
      <?php endif; ?>
      <?php endif; ?>
      <?php endif; ?>
     
      <?php if($this->countModules('right')) : ?>
      <div id="right">
        <jdoc:include type="modules" name="right" style="xhtml" />
      </div>
      <?php endif; ?>
     
      <div class="clr"></div>
    </div>
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Re: Как сделать проверку
« Ответ #6 : 29.04.2012, 20:18:23 »
Вместо того чтобы тыщу раз вызывать $this->counModules, достаточно один раз в начале файла завести переменные:

$leftSidebar = $this->countModules('left');
$rightSidebar = $this->countModules('right');

А уже по ходу писать условия:

if ($leftSidebar) {
    ...
}

И конечно же куча нерациональных условий: ведь погляди - при любом раскладе у тебя выведется

<div id="какойто_ид">
        <jdoc:include type="component" />
</div>

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

Код: php
if ($leftSidebar && $rightSidebar) {
    $contentId = 'content';
} else if (!$leftSidebar && $rightSidebar) {
    $contentId = 'content_no_left';
} else if ($leftSidebar && !$rightSidebar) {
    $contentId = 'content_no_right';
} else {
    $contentId = 'content_no_modules;
}

Ведь так же проще и понятней, разве нет?
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

lomrm

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: Как сделать проверку
« Ответ #7 : 01.05.2012, 13:34:22 »
Вместо того чтобы тыщу раз вызывать $this->counModules, достаточно один раз в начале файла завести переменные:

$leftSidebar = $this->countModules('left');
$rightSidebar = $this->countModules('right');

А уже по ходу писать условия:

if ($leftSidebar) {
    ...
}

И конечно же куча нерациональных условий: ведь погляди - при любом раскладе у тебя выведется

<div id="какойто_ид">
        <jdoc:include type="component" />
</div>

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

Код: php
if ($leftSidebar && $rightSidebar) {
    $contentId = 'content';
} else if (!$leftSidebar && $rightSidebar) {
    $contentId = 'content_no_left';
} else if ($leftSidebar && !$rightSidebar) {
    $contentId = 'content_no_right';
} else {
    $contentId = 'content_no_modules;
}

Ведь так же проще и понятней, разве нет?

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

в первом случая я сделала так как вы описали

во втором случая так же сделал так

там где блок с контентов
<div id="<?php
if ($leftSidebar && $rightSidebar) {
    $contentId = 'content';
} else if (!$leftSidebar && $rightSidebar) {
    $contentId = 'content_no_left';
} else if ($leftSidebar && !$rightSidebar) {
    $contentId = 'content_no_right';
} else {
    $contentId = 'content_no_modules';
}
?>">
<jdoc:include type="component" />     
</div>

 
*

lomrm

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: Как сделать проверку
« Ответ #8 : 01.05.2012, 13:35:44 »
но во 2 случаи не заработала id="" быд пустой
*

lomrm

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: Как сделать проверку
« Ответ #9 : 01.05.2012, 13:54:00 »

1 вопрос вот как  я понимаю этот код

Код
$leftSidebar = $this->countModules('position-left');
$rightSidebar = $this->countModules('position-right');

$pageClass = ($leftSidebar && $rightSidebar)? 'content-two-sidebars' : ($leftSidebar || $rightSidebar)? 'content-one-sidebar' : 'content-no-sidebar';

1) идет если есть оба блока  'content-two-sidebars'
2) если нету 1 блока            'content-one-sidebar'
3) если нету обоих               'content-no-sidebar'


у меня 2 и 3 класс отображаются, а когда обо блока  есть то в классе стоит 'content-one-sidebar'

что нужно подкорректировать не подскажешь?



*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Re: Как сделать проверку
« Ответ #10 : 01.05.2012, 14:08:49 »
Попробуй поменять местами первое и второе условия.
Я думаю что в php подобная цепочка условий проверяется с конца, и потому, даже когда блока два, сначала выполнится условие ($left || $right), и следовательно ($left && $right) даже проверяться не станет.

По пред. вопросу. Ты немного не понимаешь принцип работы.
Ты можешь написать так:
<div id="<?php echo $contentId ?>"> результатом чего будет, например <div id="content-one-block"> .
echo - это команда "вывода" значения в поток. Ну типа "вывести на печать".
А ты пишешь так(упрощенно)
<div id="<?php $contentId = 'some-id' ?>"> - в этом случае получаем <div id="">
Ведь в php коде мы просто записываем в переменную $contentId некое значение, но на печать мы переменную не выводим, поэтому получаем пустоту.

Поэтому размести блок условий в самом верху файла - там мы всего лишь определим значение переменной.
А уже там где нужно вывести это значение, просто напиши
<div id="<?php echo $contentId ?>">

Надеюсь доступно объяснил
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

lomrm

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: Как сделать проверку
« Ответ #11 : 01.05.2012, 14:30:09 »
Попробуй поменять местами первое и второе условия.
Я думаю что в php подобная цепочка условий проверяется с конца, и потому, даже когда блока два, сначала выполнится условие ($left || $right), и следовательно ($left && $right) даже проверяться не станет.

По пред. вопросу. Ты немного не понимаешь принцип работы.
Ты можешь написать так:
<div id="<?php echo $contentId ?>"> результатом чего будет, например <div id="content-one-block"> .
echo - это команда "вывода" значения в поток. Ну типа "вывести на печать".
А ты пишешь так(упрощенно)
<div id="<?php $contentId = 'some-id' ?>"> - в этом случае получаем <div id="">
Ведь в php коде мы просто записываем в переменную $contentId некое значение, но на печать мы переменную не выводим, поэтому получаем пустоту.

Поэтому размести блок условий в самом верху файла - там мы всего лишь определим значение переменной.
А уже там где нужно вывести это значение, просто напиши
<div id="<?php echo $contentId ?>">

Надеюсь доступно объяснил

ага спасиб понял свою ошибку все заработала , вот только1 вариант мне больше понравился меньше кода )) но блин зараза не могу сделать так чтобы показывала когда оба блока включены
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Re: Как сделать проверку
« Ответ #12 : 01.05.2012, 14:54:33 »
В общем, рабочий такой вариант:
Код: php
$pageClass = 'content-' . (($leftSidebar && $rightSidebar)? 'two-sidebars' : (($leftSidebar || $rightSidebar)? 'one-sidebar' : 'no-sidebar'));
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

lomrm

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: Как сделать проверку
« Ответ #13 : 01.05.2012, 16:06:27 »
В общем, рабочий такой вариант:
Код: php
$pageClass = 'content-' . (($leftSidebar && $rightSidebar)? 'two-sidebars' : (($leftSidebar || $rightSidebar)? 'one-sidebar' : 'no-sidebar'));

ага все заработала Большущее пасибо вам!! за помощь


а вопрос такой ещё не по теме.

есть како нибудь кусок кода с которым можно сделать чтобы на главной странице не отображался <jdoc:include type="component" />
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как сделать свой шаблон в Joomla 2.5

Автор ShaolinMaster

Ответов: 18
Просмотров: 33061
Последний ответ 26.05.2013, 11:16:48
от verstalshik
Как правильно сделать "выпадающее" меню?

Автор MirkaVesele

Ответов: 7
Просмотров: 12225
Последний ответ 20.03.2013, 02:08:33
от gevill
Как сделать на сайте два шаблона?

Автор Sergey2

Ответов: 1
Просмотров: 1773
Последний ответ 04.12.2012, 10:00:31
от Leva27
Как можно сделать такое портфолио? Выбор события в области прокрутки справа откывает фото и видео

Автор borro

Ответов: 4
Просмотров: 2642
Последний ответ 12.03.2012, 17:19:01
от Fedor Vlasenko