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);

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

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

Похожие вопросы