List of blocks in area

Вопросы, не относящиеся ни к одному разделу

List of blocks in area

Сообщение MonoStas » 19 авг 2013, 18:54 ,  »  Сообщение:#1

Всем привет. Возникла нетривиальная задача. Получить список блоков в данной area и после каждого 3-его по счету блока вывести инфу. У меня есть задумки, но не могу собрать картину воедино.

и так:

Код: Выделить всё
$a = new Area('myAreaName');
$areaObjects = $a->getAreaBlocksArray($c);
$numOfBlocks = $a->getTotalBlocksInArea($c); либо можно так написать как я понял $numOfBlocks = sizeof($areaObjects);
foreach($areaObjects as $ni)
{
// тут нужно вывести инфу. не нашел нужный метод в API
      if ($numOfBlocks % 3 == 0 ) {
          # Echo My Info
       }
}
Пользую: CentOS 6.5, Ubuntu, Nginx, PHP, MySQL, Python, Sublime Text 3, CSS3, HTML5, jQuery...... Concrete5 (-;
Аватара пользователя
MonoStas
 
Сообщения: 79
Зарегистрирован: 11 окт 2012, 19:21
Откуда: Москва

Re: List of blocks in area

Сообщение guyasyou » 19 авг 2013, 21:57 ,  »  Сообщение:#2

хм, а можно узнать конкретную задачу, которую вы решаете?
как-то это не кошерно, по-моему...
www.pure-web.ru - fullstack разработка сайтов и веб-приложений
Аватара пользователя
guyasyou
Администратор
 
Сообщения: 550
Зарегистрирован: 05 янв 2012, 12:29
Откуда: Новосибирск

Re: List of blocks in area

Сообщение MonoStas » 19 авг 2013, 22:10 ,  »  Сообщение:#3

да, метод на скорую руку. Мне нужно слайдер запилить с информацией, и там уже верстка готовая. И я block уже написал. Поэтому такие костыли приходится делать. Суть в том, что три моих block'a образуют один слайд и их все три блока нужно обернуть в div с определенным стилем, а я упустил изначально этот момент. Но все переписывать уже не охота. И слайдер использовать нужно именно такой. Т.е. следующие три блока составят еще один слайд и т.д...
Пользую: CentOS 6.5, Ubuntu, Nginx, PHP, MySQL, Python, Sublime Text 3, CSS3, HTML5, jQuery...... Concrete5 (-;
Аватара пользователя
MonoStas
 
Сообщения: 79
Зарегистрирован: 11 окт 2012, 19:21
Откуда: Москва

Re: List of blocks in area

Сообщение guyasyou » 19 авг 2013, 22:18 ,  »  Сообщение:#4

неужели, такой костыл легче сделать, чем обернуть тройки в блоке?
www.pure-web.ru - fullstack разработка сайтов и веб-приложений
Аватара пользователя
guyasyou
Администратор
 
Сообщения: 550
Зарегистрирован: 05 янв 2012, 12:29
Откуда: Новосибирск

Re: List of blocks in area

Сообщение MonoStas » 19 авг 2013, 22:30 ,  »  Сообщение:#5

Нужно обернуть 3 блока в div! вот я о чем. Или я вас не понял. Опишите подробнее идею
Пользую: CentOS 6.5, Ubuntu, Nginx, PHP, MySQL, Python, Sublime Text 3, CSS3, HTML5, jQuery...... Concrete5 (-;
Аватара пользователя
MonoStas
 
Сообщения: 79
Зарегистрирован: 11 окт 2012, 19:21
Откуда: Москва

Re: List of blocks in area

Сообщение guyasyou » 19 авг 2013, 23:13 ,  »  Сообщение:#6

ой, сори, эт меня не туда понесло. ну а то что вы предложили, не костыль- так и надо наверное.
тока в чем проблема то: не можете получить массив блоков, не можете вывести отдельно блок, или как ДИВы воткнуть?

По последнему как то так видится дело:
Код: Выделить всё
$flag = true;
foreach ($bloks as $block) {
  if ($flag) {
    echo '<div>';
    $flag = false;
  }
  // тут выводите текущий блок
  if (//проверка кратности трем, если текущий блок 3й, 6й, 9й ...) {
     echo '</div>';
    $flag = true;
  }
}


вроде норм. в начале откроет, и в конце закроет последнюю тройку. незакрытых ДИВов не должно быть
www.pure-web.ru - fullstack разработка сайтов и веб-приложений
Аватара пользователя
guyasyou
Администратор
 
Сообщения: 550
Зарегистрирован: 05 янв 2012, 12:29
Откуда: Новосибирск

Re: List of blocks in area

Сообщение cmsservice » 20 авг 2013, 09:24 ,  »  Сообщение:#7

Вот за что я люблю наших людей, так это за умение придумывать себе трудности и потом героически их преодолевать. :)
Можно же верстку слайдера из шаблона вырезать вставить в смой модуль, тогда не придется придумывать костыли. И, кстати, концептуально так будет правильно :)
С уважением, Константин
http://Переделка-сайтов.РФ
Индивидуальные решения на платформе Concrete5 для театров и производственно-торговых компаний.
Аватара пользователя
cmsservice
 
Сообщения: 763
Зарегистрирован: 10 окт 2010, 00:10
Откуда: Москва

Re: List of blocks in area

Сообщение guyasyou » 20 авг 2013, 11:38 ,  »  Сообщение:#8

cmsservice писал(а):Вот за что я люблю наших людей, так это за умение придумывать себе трудности и потом героически их преодолевать. :)
Можно же верстку слайдера из шаблона вырезать вставить в смой модуль, тогда не придется придумывать костыли. И, кстати, концептуально так будет правильно :)

вот куда меня несло)) автор, таки вы в шаблоне хотели доверстать слайдер????
www.pure-web.ru - fullstack разработка сайтов и веб-приложений
Аватара пользователя
guyasyou
Администратор
 
Сообщения: 550
Зарегистрирован: 05 янв 2012, 12:29
Откуда: Новосибирск

Re: List of blocks in area

Сообщение MonoStas » 20 авг 2013, 12:18 ,  »  Сообщение:#9

cmsservice писал(а):Вот за что я люблю наших людей, так это за умение придумывать себе трудности и потом героически их преодолевать. :)
Можно же верстку слайдера из шаблона вырезать вставить в смой модуль, тогда не придется придумывать костыли. И, кстати, концептуально так будет правильно :)

Гениально, товарищ капитан! а то я не догадался. Откуда мне знать, что во view.php можно писать что угодно :mrgreen: . Для каждого кусочка инфы (блок) так и происходит, но нужно 3 блока завернуть в 1 слайд. Мой модуль - создает блоки, но не слайды. Т.к. общее число блоков может быть 4, соответственно в о 1-ом слайде - 3 блока (3 моих модуля), а во втором 1. 3+1=4. А их может быть 6, может 2, может 112 будет.

В общем разборался, написал сам. Может кому пригодится. На забугорном форуме аналога не встретите :), я лично перекопал - ничего не нашел.
Суть в том, что в режиме отображения блоки выводятся перебором, а не как обычно $a->display($c);
Соответственно мы можем манипулировать ими как хотим. Вставлять контент до, после, вместо, да хоть сортировать...


Код: Выделить всё
   
$a = new Area('AreaName');
if ($c->isEditMode()) {
                  $a->display($c);
               } else {
                  $i = 0;
                  $blocks = $a->getAreaBlocksArray($c);
                  foreach ($blocks as $b => $block) {
                     $i++;
                     if ($i == 4) {   
                        echo('What you need to insert');
                        $i = 0;
                     }
                     // echo $b; // block position in area
                     $block->display();
                  }
               }


Кстати, хотел сделать еще красивее, но почему-то $a->setBlockWrapperStart('my content') и соответственно $a->setBlockWrapperEnd('my content') у меня не завелись. Не стал разбираться почему.
Пользую: CentOS 6.5, Ubuntu, Nginx, PHP, MySQL, Python, Sublime Text 3, CSS3, HTML5, jQuery...... Concrete5 (-;
Аватара пользователя
MonoStas
 
Сообщения: 79
Зарегистрирован: 11 окт 2012, 19:21
Откуда: Москва

Re: List of blocks in area

Сообщение MonoStas » 20 авг 2013, 12:21 ,  »  Сообщение:#10

вот куда меня несло)) автор, таки вы в шаблоне хотели доверстать слайдер????


Не хотел, но пришлось. Опишите как во view.php определить позицию текущего блока - перепишу с удовольствием.
Пользую: CentOS 6.5, Ubuntu, Nginx, PHP, MySQL, Python, Sublime Text 3, CSS3, HTML5, jQuery...... Concrete5 (-;
Аватара пользователя
MonoStas
 
Сообщения: 79
Зарегистрирован: 11 окт 2012, 19:21
Откуда: Москва

Re: List of blocks in area

Сообщение cmsservice » 20 авг 2013, 16:45 ,  »  Сообщение:#11

Ну вообще-то можно и легко. :)
Есть такой модуль, в каталоге на сайте конкрита он называется matogertel_area_splitter вот он занимается ровно этим. Кода не очень много, но вот смотрите во вложении (контроллер и вьюшку положил, чтобы не нарушать авторские права)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
С уважением, Константин
http://Переделка-сайтов.РФ
Индивидуальные решения на платформе Concrete5 для театров и производственно-торговых компаний.
Аватара пользователя
cmsservice
 
Сообщения: 763
Зарегистрирован: 10 окт 2010, 00:10
Откуда: Москва


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron