Задать вопрос
foxayb
@foxayb
newbie

Как загрузить данные нажав на «Раскрыть блок»?

Понимаю, что есть Серверная часть, есть клиентская, но не знаю как решить следующую задачу:
Необходимо чтобы пользователь нажимал на "Раскрыть фильтр" и туда загружалась информация (св-ва фильтра).

Сейчас св-ва фильтра грузятся всегда:
5f7f54006f9b8030954294.jpeg

А необходимо чтобы они подгружались только при раскрытии:
5f7f550351c15893149218.jpeg

Т.к. сейчас они грузятся всегда то и выглядит это на стороне PHP вот так:
php-код
if (in_array($type, $frontendTypes)) {
...
		} else {  //фильтры загружаются начиная с этого момента
			$htmlOpt = DispatcherWpf::applyFilters('getTaxonomyOptionsHtml', $htmlOpt, array(
				'type' => $type,
				'settings' => $filter,
				'terms' => $productAttr,
				'selected' => $attrSelected,
				'showed' => $showedTerms,
				'counts' => $countsTerms,
				'excludes' => $excludeIds,
				'includes' => false,
				'display' => $layout,
				'class' => $inLineClass
			));
		}

		$blockStyle = ( !$showFilter || ( !$show_all_atts && self::$isLeerFilter ) ? 'display:none;' : '' ) . $blockStyle;
		if (!empty($blockStyle)) {
			$this->setFilterCss('#' . self::$blockId . ' {' . $blockStyle . '}');
		}

		$noActive  = ReqWpf::getVar($filterName) ? '' : 'wpfNotActive';
		$noActive  = !ReqWpf::getVar($filterName) && $hidden_atts ? 'wpfHidden' : $noActive;
		$showCount = $filter['settings']['f_show_count'] ? ' wpfShowCount' : '';

		$html  =
			'<div id="' . self::$blockId .
				'" class="wpfFilterWrapper ' . $noActive . $showCount .
				'" data-filter-type="' . $filter['id'] .
				'" data-display-type="' . $type .
				'" data-get-attribute="' . $filterName .
				'" data-query-logic="' . $logicSlug .
				'" data-slug="' . esc_attr($filterNameSlug) .
				'" data-radio="' . ( 'radio' === $type ? '1' : '0' ) .
				'" data-taxonomy="' . $attrName .
				'" data-label="' . $attrLabel .
				'" data-show-all="' . ( (int) $show_all_atts ) . '"' . $filter['blockAttributes'] .
			'>';
		$html .= $this->generateFilterHeaderHtml($filter, $filterSettings);
		$html .= $this->generateDescriptionHtml($filter);
		$html .= $this->generateSearchFieldList('<div class="wpfCheckboxHier">' . $htmlOpt . '</div>', $settings, $labels);
		$html .= '</div>';//end wpfFilterContent
		$html .= '</div>';//end wpfFilterWrapper

		return $html;
	}


Запрос
$html .= $this->generateSearchFieldList('<div class="wpfCheckboxHier">' . $htmlOpt . '</div>', $settings, $labels);

выводит фильтры под заголовком (сейчас сразу)
  • Вопрос задан
  • 69 просмотров
Подписаться 1 Простой 6 комментариев
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
iResource
@iResource
Разработчик IR XML2Ozon
Варианты:
1) (попроще) грузить - всё же сразу, но изначально просто блок с вариантами скрыт (CSS). А при нажатии на "+" блок отображается (JS или jQuery).
2) (посложнее) изначально вообще не грузить варианты, при нажатии на "+" средствами JS производить AJAX запрос к специальному php-файлу, который отдаст эти варианты, и на странице вывести эти варианты в нужном виде.
Я бы выбрал 1 вариант в данном случае.
Но в вопросе больше намёк на 2 вариант ("необходимо чтобы они подгружались только при раскрытии"). Хотя, возможно, это лишнее.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽