Мартин Очоа

Мартин Очоа

С нами с 30 мая 2017; Место в рейтинге пользователей: #352

Спрятать от доступа категории, но оставить товары из них в выборке mFilter2

Привет!

Подскажите, как сделать так, чтобы категории были недоступны посетителям сайта по их url (нельзя было их открыть на фронтенде) — хочу оставить категории, только через фильтр. Но при этом вложенные в эти категории товары показывались в результатах выбора mFilter2.

Ситуация: в фильтре mFilter2 добавляю подкатегории текущей категории:

[[!mFilter2?
					&limit=`15`
					&parents=`[[*id]]`
					&element=`msProducts`
					&setMeta=`1`
					&filters=`
						parent:categories,
					`
					&aliases=`
					    resource|parent==category,
                    			`
					&_filterOptions=`{"autoLoad":0}`
					&tpls=`tpl.msProducts.row2`
					&class=`msProduct`
					&sort=`ms_product|menuindex:asc`
					&tplOuter=`tpl.mFilter2.outer.2`
					&paginator=`pdoPage`
					&ajaxMode=`scroll`
				]]


Выбранные категории в фильтре преобретают красивые url, мета-теги и т.д. с помощью дополнения seoFilter.

site.ru/category1/ и т.д.

Повторю, задача: скрыть категории, чтобы пользователь не мог попасть на них по url.

Мартин Очоа
09 ноября 2017, 19:58
modx.pro
1 493
0

mFilter2 - из метода boolean убрать значение "нет"

Здравствуйте!

Помогите, пожалуйста, доработать метод фильтрации. У товара есть поле ms|favorite. У некоторых товаров это поле отмечено (чекбокс). Нужно в фильтре вывести только одну галочку, по клику на которую бы фильтровались товары. Можно выводить методом boolean, но тогда будет выбор «да» и «нет».

Нашел направление, куда копать.

Создал новый метод Positive, присвоил:

&filters=`ms|favorite:positive`
Но дальше эксперименты-правки не увенчались успехом.

Грубо говоря, из метода boolean, который я взял за основу, нужно убрать те варианты, где поле не отмечено (нулевое?). Далее чистый boolean с исправленными названиями на positive.

<?php
class myCustomFilter extends mse2FiltersHandler {
	public function buildPositiveFilter(array $values, $name = '') {
		if (count($values) < 2 && empty($this->config['showEmptyFilters'])) {
			return array();
		}
		$results = array();
		foreach ($values as $value => $ids) {
			$empty = empty($value) || (is_numeric($value) && (int)$value === 0);
			$title = $empty
				? $this->modx->lexicon('mse2_filter_positive_no')
				: $this->modx->lexicon('mse2_filter_positive_yes');
			if (!isset($results[$title])) {
				$results[$title] = array(
					'title' => $title,
					'value' => (int)!$empty,
					'type' => '<b>positive</b>',
					'resources' => $ids,
				);
			}
			else {
				$results[$title]['resources'] = array_merge($results[$title]['resources'], $ids);
			}
		}
		ksort($results);

		return $results;
	}
 	public function filterPositive(array $requested, array $values, array $ids) {
		$matched = array();

		$tmp = array_flip($ids);
		foreach ($requested as $value) {
			foreach ($values as $k => $resources) {
				$empty = empty($k) || (is_numeric($k) && (int)$k === 0);
				if ((empty($value) && !$empty) || (!empty($value) && $empty)) {
					continue;
				}
				foreach ($resources as $id) {
					if (isset($tmp[$id])) {
						$matched[] = $id;
					}
				}
			}
		}

		return $matched;
	}
}
Мартин Очоа
30 октября 2017, 20:06
modx.pro
2
1 710
0

Fenom вырубается скриптами в шапке

День добрый!

Не работает FENOM на странице интернет-магазина minishop2 (есть дополнения mSearch2 и seofilter).

Комментирую блок [[!mFilter2… ]] — тогда дальнейшний проверочный код на странице работает:
{if $_modx->resource.id == 14}
Работает!!!
{/if}
Нагуглил, что Fenom может отрубаться из-за присутствия на странице открывающей фигурной скобки и последующего символа без побела.

Сравнением кода шапки с работающим блоком [[!mFilter2… ]] и закомментированным, выяснил, что в шапку подставляются такие стили и скрипты (ниже код). Наверное в них и проблема? В каких файлах лежат то, что подставляется сюда — хочу обернуть содержимое {ignore}{/ignore}.

Не понятно, почему разработчики сразу их не комментируют {ignore}{/ignore}, если это выбивает Fenom.
Мартин Очоа
25 октября 2017, 23:42
modx.pro
1 085
0

Редирект URL со слэшем в конце на без слэша

Это не вопрос, а решение.
Ниже код плагина, который решает задачу: редирект URL со слэшем в конце на URL без слэша в конце.
Гугл/яндекс в течение часа дал ответ на обратную задачу (редирект без слэша в конце на со слэшем).
Делюсь доработкой с надеждой, что это вылезет в топ и поможет сохранить время следуюшим поколениям :)
Также сделаны настройки по пунктам 1-6 отсюда.

Плагин настраивается на событие OnLoadWebDocument:

<?php
if ($modx->event->name == 'OnLoadWebDocument') {
  $request = $_SERVER['REQUEST_URI'];
  $params = '';
  if (strpos($request, '?') !== false) {
  	list($request, $params) = explode('?', $request);
  }
  $uri = $request;
  if(!empty($uri) && strpos($uri, '.') === false && substr($uri, -1, 1) == '/') {
    $uri = substr($uri, 0, -1);
    if (!empty($params)) {
      $uri .= '?' . $params;
    }
    $modx->sendRedirect($uri, array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
  }
}
Мартин Очоа
18 июля 2017, 21:19
modx.pro
5
5 694
+1