Перейти к содержимому


Фотография
- - - - -

Вопрос по условию PHP


Лучший Ответ SmetDenis , 19 February 2016 - 08:36

Добрый день,

 

Думаю, можно оптимизировать вывод используя стили позиции

http://jbzoo.ru/docs/position-styles

 

Тогда все элементы будут в одной позиции и использовать стиль pipe

Перейти к сообщению


  • Закрытая тема Тема закрыта
Сообщений в теме: 7

#1 alexmixaylov

alexmixaylov

Отправлено 18 February 2016 - 19:38

делаю фильтр материалов в категории
http://205095.alexmi...eden-tours.html
 
параметры некоторых элементов  присваиваются дата атрибутам строки
и скриптом из атрибутов формируются селекты.........
 
вопрос к специалистам PHP

$filter1 = null;
$filter2 = null;
$filter3 = null;

if ($this->checkPosition('filter1') AND strlen($this->renderPosition('filter2')) > 2) {
    $filter1 = trim($this->renderPosition('filter1'));
}
if ($this->checkPosition('filter2') AND strlen($this->renderPosition('filter2')) > 2) {
    $filter2 = trim($this->renderPosition('filter2'));
}
if ($this->checkPosition('filter3') AND strlen($this->renderPosition('filter3')) > 2) {
    $filter3 = trim($this->renderPosition('filter3'));
}

$vid = $filter1 . $filter2 . $filter3;

    <tr     
        <?php if ($vid): ?>
        data-vid="<?php echo $vid; ?>"
        <?php endif; ?>

 
в каждой из позиций может быть несколько элементов
разделитель у них "|"
вывод выглядит так  "Семьи с детьми | По стране"

если данные есть в двух позициях, то вывод получается такой 

 "Семьи с детьми | По странеАктивный"

 

переменная с атрибутами $vid = $filter1 . $filter2 . $filter3;  состоит из нескольких переменных

получается что между $filter1  и $filter2  отсутствует разделитель

я могу всунуть туда разделитель так $vid = $filter1 .  '|' . $filter2 . $filter3;

но это тоже нормально работать не будет

 

 

ВОПРОС В ТОМ как туда правильно всунуть разделитель между переменными

 

 

  • 0

#2 alexmixaylov

alexmixaylov

Отправлено 19 February 2016 - 08:32

$filter = array();
    
if ($this->checkPosition('filter1') AND strlen($this->renderPosition('filter1')) > 2) {
    $filter[] = trim($this->renderPosition('filter1'));
}
if ($this->checkPosition('filter2') AND strlen($this->renderPosition('filter2')) > 2) {
    $filter[] = trim($this->renderPosition('filter2'));
}
if ($this->checkPosition('filter3') AND strlen($this->renderPosition('filter3')) > 2) {
    $filter[] = trim($this->renderPosition('filter3'));
}

$vid = implode(" | ", $filter);

решил таким образом, теперь корректно работает


  • 0

#3 SmetDenis

SmetDenis

Отправлено 19 February 2016 - 08:36   Лучший Ответ

Добрый день,

 

Думаю, можно оптимизировать вывод используя стили позиции

http://jbzoo.ru/docs/position-styles

 

Тогда все элементы будут в одной позиции и использовать стиль pipe


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#4 alexmixaylov

alexmixaylov

Отправлено 19 February 2016 - 08:51

спасибо, Денис

очень познавательная статья

 

у меня в настройках шаблона вывода элемента, в качестве разделителя указан pipe

 

но в данном случае мне нужно объединить вывод трех элементов

получается что в таком случае вывод будет выглядеть так

"(элем1)значение 1 | (элем1)Значение 2(элем2)значение 1 | (элем2)Значение 2 "

между Значением 2 элемента 1

и Значением 1  второго элемента не будет нужного мне разделителя


  • 0

#5 SmetDenis

SmetDenis

Отправлено 19 February 2016 - 08:56

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

В вашем случае должен справиться style => "pipe"

 

Либо можно сделать свой стиль на его основе.


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#6 alexmixaylov

alexmixaylov

Отправлено 19 February 2016 - 09:15

http://delfa.loc/cou...tvia-tours.html

 

получается такая бяка 

Семьи с детьми |

Круизы

если отсутствуют некоторые позиции(один из элементов пустой)


  • 0

#7 SmetDenis

SmetDenis

Отправлено 19 February 2016 - 09:20

Как я говорил - "либо можно сделать свой стиль на его основе".

Просто нужно дополнительное условие вокруг $element->render(). У вас это strlen() > 2

 

components\com_zoo\renderer\element\pipe.php

 

На самом деле это просто более лаконичое решение. Делает тоже само что и у вас.


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#8 alexmixaylov

alexmixaylov

Отправлено 19 February 2016 - 09:42

да. я понял,

 strlen() > 2 в шаблоне вывода срабатывать не будет, там в любом случае длинна строки будет больше 2, если хотя бы один из элементов содержит информацию

спасибо, за мыслю :)

сделаю собственный стиль, нужно использовать в большей мере функционал, который предоставляют разработчики


  • 1




Click to return to top of page in style!