Спойлеры в главной категории

  • 10 Ответов
  • 537 Просмотров

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

Здравствуйте, уважаемые форумчане! Может кто из вас подскажет, что делаю не так..
На главной странице сайта выводится категории товаров. Между категориями я вставил разделители, чтобы выделить различные направления товаров. Для этого пришлось немного переделать maincategory.php. Но, ввиду того, что категорий достаточно много, требуется спрятать их под спойлеры. Чтобы по клику на разделитель можно было открыть или скрыть соответствующий раздел. Использовал небольшой скрипт:
Спойлер
[свернуть]
ну и соответственно сам код страницы:
Спойлер
[свернуть]
И все бы хорошо, но получается так, что разделы вложены друг в друга, как матрешки. Собственно саму страничку, и как она работает можно посмотреть здесь - mambo.com.ua
« Последнее редактирование: 08.06.2015, 22:28:00 от angry_ded_mazay »

*

dmitry_stas

  • ********
  • 9610
  • + 929 -
Re: Спойлеры в главной категории
« Ответ #1 : 07.06.2015, 19:56:15 »
по идее вот тут не хватает дива

Цитировать
             <div>
              <p class = "category_short_description"><?php echo $category->short_description?></p>
           </div>

           </div>
        </div>
    </div>  
 <?php } ?>    
  
</div>


<?php } ?>
<?php print $this->category->description?>
</div>
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

Re: Спойлеры в главной категории
« Ответ #2 : 07.06.2015, 20:01:11 »
почти... но прячется только первый товар в разделе.. и верстка едет..

Re: Спойлеры в главной категории
« Ответ #3 : 08.06.2015, 01:00:36 »
похоже, что одним циклом foreach не обойдется... он упорно вкладывает разделы один в другой.. может быть несколько циклов помогут..

*

robert

  • ********
  • 4002
  • + 371 -
Re: Спойлеры в главной категории
« Ответ #4 : 08.06.2015, 01:09:19 »
Не
Код: javascript
$(this).parent().children('div.spoiler_body').toggle('normal');
, а
Код: javascript
$(this).siblings('div.spoiler_body').toggle('normal');
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

Re: Спойлеры в главной категории
« Ответ #5 : 08.06.2015, 09:07:59 »
К сожалению, нет.. структура категорий так и остается вложеной.. соответственно, на работе спойлеров это никак не отражается.. видимо придется делать на каждый раздел свой цикл. вот только не соображу, как сделать, чтобы последующий цикл начинался с места, где закончился предыдущий. может использовать for вместо foreach?

*

dmitry_stas

  • ********
  • 9610
  • + 929 -
Re: Спойлеры в главной категории
« Ответ #6 : 08.06.2015, 11:05:36 »
циклы абсолютно не при чем. у вас банально не хватает закрытых дивов. добавьте после того закрытого дива, который добавили, еще вот это:

<?php if ($k%$this->count_category_to_row==0) echo '</div>'; ?>
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

Re: Спойлеры в главной категории
« Ответ #7 : 08.06.2015, 19:20:07 »
циклы абсолютно не при чем. у вас банально не хватает закрытых дивов. добавьте после того закрытого дива, который добавили, еще вот это:

<?php if ($k%$this->count_category_to_row==0) echo '</div>'; ?>
добавил.. прячется только первый товар в разделе, и верстка вся летит.. специально оставил, чтобы можно было посмотреть, как оно выглядит

Re: Спойлеры в главной категории
« Ответ #8 : 08.06.2015, 22:25:31 »
Получилось!! ^-^
Дивов действительно не хватало, но немного не там. И за подсказку отдельное спасибо, dmitry_stas. Опять немного покурочил шаблон главной категории. Получилась вот такая песня:
Спойлер
[свернуть]
Может кому-то и пригодится идея ;)
Кстати, скрипт немного поменялся. Чтобы при открытии следующего спойлера предыдущий открывался нужно сделать так:
Спойлер
[свернуть]
Теперь попробую улучшить, то что получилось. Хочется сделать так, чтобы по клику на основной пункт меню слева раскрывался соответствующий спойлер... Если у кого-то будут идеи - от помощи не откажусь))

Re: Спойлеры в главной категории
« Ответ #9 : 13.06.2015, 19:06:29 »
Возвращаемся к теме... Немного исправил скрипт.
Код
<script type="text/javascript">
jQuery(document).ready(function(){
 jQuery('.spoiler_links').click(function(){
jQuery("div[class^='spoiler_body']").hide('normal');
  if (jQuery(this).parent().children('div.spoiler_body').css("display")=="none") {
jQuery("div[class^='spoiler_body']").hide('normal');
jQuery(this).parent().children('div.spoiler_body').toggle('normal');
}
else jQuery("div[class^='spoiler_body']").hide('normal');
  return false;
 });
});
jQuery(document).on('click', 'a', function () {
     if (this.hash) {
jQuery("div[class^='spoiler_body']").hide();
         jQuery(this.hash).show(1000);
     }
});
</script>
Теперь по клику на ссылку с якорем открывается соответствующий спойлер. НО... Вся эта история работает только в пределах одной страницы. А как теперь сделать, чтобы и при переходе с других страниц это работало??

Re: Спойлеры в главной категории
« Ответ #10 : 14.06.2015, 22:06:10 »
Попробовал переделать код из другого моего проекта, который активирует табы по анкорной ссылке с другой страницы.
Код
jQuery(function() {

jQuery('ul.ma-vmenu').on('click', 'li:not(.active)', function() {
jQuery(this)
.addClass('active').siblings().removeClass('active')
.closest('div.ma-content-layout').find('div.spoiler_body').removeClass('spoiler_open').eq(jQuery(this).index()).addClass('spoiler_open');
});

var tabIndex = window.location.hash.replace('#tab','')-1;
if (tabIndex != -1) jQuery('ul.ma-vmenu li').eq(tabIndex).click();

jQuery('a[href*=#tab]').click(function() {
var tabIndex = jQuery(this).attr('href').replace(/(.*)#tab/, '')-1;
jQuery('ul.ma-vmenu li').eq(tabIndex).click();
});

});
Увы, результат тот-же. Спойлеры открываются только в пределах главной страницы. С другой страницы происходит только переход на главную с открытым по умолчанию первым спойлером((