[SeoFilter] 1.6.0 - большое обновление компонента для формирования SEO-страниц для фильтров

[ купить дополнение ] [ демо ] [ документация ]

Планомерно продолжаю улучшать SeoFilter, но хотелось бы быстрее.
Спасибо, что «пинаете» в поддержке (и не только там) и просите обновлений :)
Объяснять, что это за компонент в данной заметке не буду, но можно пройтись по ссылкам выше и ознакомиться.

Мне тяжело выбрать, что же в обновлении самое главное, но как мне кажется — улучшение стабильности и устранение непонятных моментов и быстрый доступ к настройкам:
SeoFilter
Мне не сильно нравится то, как устроены системные настройки по компонентам, длинные названия и описания почти не прочитать. Пользователи часто путаются, не знают где искать настройки. А теперь всё под рукой и при наведении на поле появляется расширенное описание по каждой настройке.

Помимо настроек, в обновлении есть ещё некоторые полезности:
  • Вложенные хлебные крошки
  • События для ваших плагинов
  • Пошаговый пересчёт и удаление пустых страниц
  • Визуальный редактор для полей SEO-страниц, правил (в FrontendManager тоже)
  • Запоминание гридов, табов в админке. Сортировка активных по столбцу «Действия»
  • Изменения по внешнему виду, много переименований, добавлены описания
  • Нормальная поддержка условий для ограничений сбора значений в полях
  • Переработан фронтенд JS-файл, по классу формы сможет отслеживать и подгружать SEO-страницу
  • Ну и прочие полезности, фишки, которые я уже забыл, пока так долго готовил обновление
Ну и по традиции, дальше разберу некоторые пункты подробнее:

Вложенные хлебные крошки

Чтобы активировать хлебные крошки, нужно активировать соответствующую настройку на новой вкладке «Настройки» — или же по старинке (ключ seofilter_crumbs_nested).
Да, настройка добавит запросы, но найдёт страницы, состоящие из тех же полей (стараясь учесть порядок).
И да, нужно там же рядом заменить старый чанк на новый tpl.SeoFilter.crumbs.nested, а также в вызове !pdoCrumbs в настройке tplCurrent (вызов должен быть некэшированным).

Плагины для гибкого управления контентом

В компоненте появились первые плагины — 4 стандартных процессорных и 1 поинтереснее.
  • sfOnBeforeWordAdd — перед добавление нового слова
  • sfOnWordAdd — после успешного добавления слова
  • sfOnBeforeUrlAdd — перед добавлением SEO-страницы
  • sfOnUrlAdd — после успешного добавления страницы
  • sfOnReturnMeta — перед возвращением всех meta-seo-данных на страницу через Ajax/или просто при открытии страницы. Отличить можно по $action. При открытии страницы $action='plugin'; Ниже приведу пример плагина, как можно управлять и даже изменять url
<?php
switch ($modx->event->name) {
    case 'sfOnBeforeWordAdd': 
            // все новые слова будут добавлены неактивными, значит SEO-страницы не будут сформированы
            // так как событие стандартное, доступны $mode, $data, $object, $word, $id = 0
            $word->set('active',0); // можно обратиться и через $object
        break;
    case 'sfOnReturnMeta': 
        //доступны переменные: $page - id физической страницы, $SeoFilter - объект SeoFilter, $meta - все данные
        // и $action с 3-мя возможными значениями:
        // 'plugin' - при срабатывании из плагина SeoFilter перед выставлением плейсхолдеров
        // 'getmeta' - при стандартном запросе через Ajax при submit фильтра 
        // 'metabyurl' - срабатывает, когда в браузере человек пользуется вперёд/назад
	$meta = $modx->getOption('meta', $scriptProperties, array(), true); //массив данных перед отдачей на страницу
        //$modx->log(1,print_r($meta,1)); //вот так можно распечатать все данные в журнал ошибок
        // будет множество данных, но по ним сможете делать какие-то условия и изменять 
        
        //простой пример для замены стандартного контента обычной страницы на SEO-странице
           if(empty($meta['content'])) {
                $meta['content'] = ' '; //символ пробела, чтобы пройти проверку на непустой плейсхолдер
            }
    
	  $values = $modx->Event->returnedValues;
          $values['meta'] = $meta;
          $modx->event->returnedValues = $values;
	break;
}

Пошаговый пересчёт и удаление пустых страниц

Да, многие просили, чтобы пустые страницы вообще не создавались.
Но у многих есть ещё проблемы с подсчётами, от которых зависит «пустота» страницы.
Это возможно и даже будет сделано в версии 2.0 (по плану она следующая после текущей ветки 1.6).

Но теперь хотя бы можно в пару кликов удалить все пустые страницы, даже если их 50 тысяч.
Для этого во вкладке SEO-страницы нужно выбрать "Ещё"->"Удалить пустые страницы".
Компонент сам всё пересчитает и будет сразу же удалять пустые страницы. Прогресс-бар будет держать в курсе насчёт количества удалённых страниц)

Ещё тестировал с пошаговым добавлением новых URL страниц. На 50 тысяч страниц отрабатывало хорошо, но пока есть проблемы с другими зависимыми частями. Поэтому сперва будет рефакторинг кода для версии 2.0, а потом массовое внедрение этого функционала.
Кому нужно сейчас много страниц добавлять, не упираясь в лимиты — пишите, что нибудь придумаем.

Подключение визуального редактора или ACE для SEO-полей

Разбавлю кучу текста картинками:

В описании расписал подробнее, через двоеточие — высота, с приставкой Rule. — для полей правила.

А вот как это выглядит в обновлённом интерфейсе для SEO-страницы: (кликабельно)

Очень удобно, когда видно подсветку синтаксиса, ошибок будет гораздо меньше :)

Условия для ограничения поиска в полях

Раньше были очень простенькие условия, которые, можно сказать, нормально и не работали.
Теперь же можно прописать условие по сбору слов по таким условиям: определённая категория, стоимость больше 0, учитывать ТВ значения или опции (но тв и опции гораздо реже понадобятся). Нужно указывать только названия классов, можно полностью, можно популярными сокращениями. Компонент сам приджойнит к ресурсам все поля (если они существуют).
{"parent":9,"Data.price:>":0}
Эти же условия будут учитываться и при сохранении ресурса, чего раньше не было.

Обработка фильтров

Мощно переделал javascript для фронтенда. Старый файл остался с названием -old.
В общем, теперь можно достаточно быстро к любому простенькому фильтру прикрутить SeoFilter.

Достаточно также добавить поля, привязать правило к нужно странице.
А на нужной странице для формы собрать значения через js и вызвать метод:
var params = {"parent":10,"color":"green"}; //ваш массив с собранными значениями фильтров
SeoFilter.loadMeta(params); //заменит URL и все тексты
Ещё я немного поэкспериментировал в этом направлении и на основе статьи от Ильи Уткина про простой AJAX-фильтр почти прикрутил автоматический обработчик формы по классу sf_filters.
Это очень сырой функционал, который пока работает только через Ajax и имеет множество проблем, поэтому никому не советую его использовать, но если что улучшить можно) Пример: s9767.h8.modhost.pro/ajax-filter

Планы

Как обычно, планы грандиозные и на ближайшие месяцы:
  • Обновить документацию под все возможности
  • Переписать почти всё, что можно
  • Подсчитывать результаты до добавления ссылки (чтобы не добавлять пустые страницы)
  • Чтобы все добавления работали пошагово через ajax (чтобы хоть миллион страниц добавить)
  • Для правила сделать выбор физической страницы через дерево категорий
  • Сделать красивую демку с реальными фильтрами
  • Возможность задавать свои шаблоны для формирования адресов
  • Возможно, добавить работу со множественными значениями одного фильтра, если кто-то, наконец, объяснит мне, есть ли вообще от этого польза
Приглашаю в комментарии
Давайте обсудим, что я забыл сделать, что мне ещё нужно будет сделать и вообще, стало ли удобнее пользоваться на ваш взгляд?
Мой взгляд может быть сильно замыленным и в упор не увижу страшно-неудобные вещи.

Ах да, до следующего большого обновления цену менять не планирую :)
И ещё, я как автор компонента, буду рад настроить новую версию «под ключ» за какую-нибудь символическую стоимость на парочке проектов, чтобы больше понять потребности реальных клиентов. Бронируйте)
Евгений Шеронов
14 января 2019, 06:14
305
+9

Комментарии: 22

Андрей
14 января 2019, 10:39
0
Из пожеланий, если бы можно было подружить это все с локализатором, было бы замечательно, а то сейчас приходится выкручиваться лексиконами)
    Евгений Шеронов
    14 января 2019, 16:04
    +2
    Я до сих пор не пользовался Localizator-ом, а что и как там нужно сделать?)
    Чтобы тексты можно было на разных языках привязать к SEO-страницам?
    Сейчас я добавил настройку для открытия 3го таба для правил (активирует properties так называемые).
    Теперь можно туда ввести данные и уже с помощью нового события на плагин sfOnReturnMeta подменить заголовки языка по умолчанию, на те введённые в properties)

    А вообще, напишите мне в поддержку, если выдадите доступ — попробую проверить эту теорию.

    И да, забыл написать в топике, что в этом обновлении добавил вызов события onWebPageInit, чтобы корректно работал компонент cityFields)
      Андрей
      14 января 2019, 16:16
      0
      > Чтобы тексты можно было на разных языках привязать к SEO-страницам?
      ну да, как-нибудь указать язык для которого значения указываются или еще как-то.

      Да я в общем-то с помощью prepareSnippet подгружаю все значения на нужном языке. Например для фильтра значение Камень, превращается в kamen с префиксом и по этому значению подгружается лексикон, пока такой вариант устраивает.

      А вот что делать с вкладкой Правила SEO — SEO, где указываются уже h1 и пр. текста, пока ничего умнее тех же лексиконов не придумал.

      По поводу плагина посмотрю.
        Евгений Шеронов
        14 января 2019, 19:03
        0
        Тогда да, определённо нужно задействовать настройку seofilter_hidden_tab.

        Там появятся два поля, куда можно добавить сколько угодно значений. При редактировании для значений можно открыть окошко, где будет ACE подключён.
        Там бы я прописывал поля так: «h1||Buy phones». Если же других языков больше двух, то ещё как нибудь сперва язык через разделитель: «title:eng||Заголовок страницы для англ языка».

        И в плагине получать эти свойства, получать ключ языка из локализатора (из сессии?) и заменять значения, отбросив приставки «title:eng» и прочие.

        Вкладка появится как раз у правил. Только у SEO-страниц в самой вкладке не появляются эти поля, но при интеграции с FrontendManager при быстром редактировании свойства есть.
          Андрей
          14 января 2019, 19:10
          0
          Спасибо, попробую.
Илья
14 января 2019, 17:34
0
Уже писал в ТП, но не увидел в планах, поэтому решил напомнить здесь))

сделать возможность генерить в словаре записи для диапазонов из number с настройкой с каким шагом генерировать

Например для одного поля нужен шаг 0.5 и 1, для другого — 50, и т.д.
    Евгений Шеронов
    14 января 2019, 20:31
    0
    Это хорошая идея и похожа в реализации на скрещивание нескольких значений одного поля.

    Есть у кого-нибудь ещё возможные примеры применения по автоматизации слайдеров?
    Чтобы руками не вписывать значения, формировать диапазоны автоматически или сохранять двойные, но одиночные значения: «50,50» по каким-то условиям)
Илья
14 января 2019, 17:36
0
Ещё просьба (так же уже в ТП есть, но думаю может понадобится не только мне) — Обновить документацию под связку с Облако тегов (Tagger), сейчас только по TV расписано, хотя возможно это я слепой…
    Евгений Шеронов
    14 января 2019, 20:29
    0
    с Tagger разобрались :)
    в целом каких-то серьёзных проблем там нет.
    При добавлении поля в ключ для класса Tagger рекомендую добавлять id группы тегов.
Alexey
15 января 2019, 00:45
0
Возможно, добавить работу со множественными значениями одного фильтра, если кто-то, наконец, объяснит мне, есть ли вообще от этого польза
Не знаю о том ли подумал. Но вот мой пример с которым повозился.
есть такой пятислойный фильтр (тут его упрощу, но смысл не меняется):
а)
-дома до 50 кв.м.
-дома более 50 кв.м.
б)
-один этаж
-два этажа
в)
-с подвалом
-без подвала
г)
-с гаражом
-без гаража
д) дополнительные параметры

В общем, два уровня вручную всего со всем осилил (и то по сути только по заголовку), а вот три и более — уже довольно сложно. Хотя не знаю можно ли эту работу упростить.
т.е. для одного из вариантов «а» — есть ещё 4 варианта из нижележащих. И к каждому можно прописать свои текстовки. ручной ввод вполне устраивает, но со временем начинаешь путаться какие значения с какими уже скомбинировал.

Компонент отличный, претензий не имею!
Рад что купил, хотя… говорят SEO уже умерло. Но для людей оно действительно может быть полезным )))
    Евгений Шеронов
    15 января 2019, 01:19
    +1
    Ну компонент же не только какие-то SEO-фишки же предоставляет)
    В первую очередь способствует созданию релевантных страниц и удобству навигации)

    Про множественные значения я имел ввиду то, что человек может выбрать сразу галочками два и более пункта в одном поле(фильтре):
    -дома до 50 кв.м.
    -дома от 50 кв.м. до 100 кв.м (чуть поправил для примера)

    И вот в вашем примере релевантной страницей было бы «Дома до 100 кв.м» (заходя на такую страницу должно отметиться две галочки). А вот с гаражами и другими boolean типами в этом смысла бы не было.

    А вот с цветами люди часто выбирают несколько различных цветов: красный, желтый, оранжевый, когда ищут тёплые оттенки, например. Вот это в ручную приходится добавлять в словарь: «красный, желтый», чтобы получить двойные страницы и т.д.

    Но вообще по вашему примеру(из картинки, где 5 фильтров) правил добавить нужно не мало.
    5 (для каждого одиночного правила)
    +10 двойных правил (Дома до 150кв.м с гаражом, Двухэтажные дома с подвалом)
    +10 максимум тройных правил (Дома до 150кв.м с гаражом и подвалом).
    А в правилах из четырёх полей не было бы какой-то пользы. Получился бы слишком низкочастотный запрос) (но там было бы ещё 5 правил и для всех 5 полей всего 1 правило).
    = 25 правил для 5 фильтров на странице (до 3 полей)

    Много, но в этом и заключается вся работа, главное шаблоны текстов прописать.
    Зато при добавлении новых площадей, дополнительных опций всё создастся автоматически.

    А вообще ускорить это дело немного можно, копируя добавленные правила.
    Если есть идеи, как это можно ускорить или упростить — напишите)
      Alexey
      15 января 2019, 09:11
      0
      теперь понял о чем шла речь. спасибо! да — такое действительно было бы полезно кому-то.

      А вот как быстрее организовать правила мыслей пока нет.
      Я совсем не программист и логику могу представить лишь примитивную. По мне и так уже всё сделано довольно-таки не плохо.
Alexey
15 января 2019, 00:57
0
Не успел загрузить картинку.
В общем-то что-то такое сложновато миксовать
Роман
16 января 2019, 13:43
0
Возможно, добавить работу со множественными значениями одного фильтра, если кто-то, наконец, объяснит мне, есть ли вообще от этого польза — нужно, многие заказчики просят такой функционал
    Антон
    16 января 2019, 13:44
    0
    Поддерживаю, очень Важный функционал.
      Евгений Шеронов
      16 января 2019, 14:48
      0
      Давайте немного обсудим?
      Просто уже несколько раз обговаривал с несколькими людьми, но до дела так и не дошло)

      Нашёл свои старые вопросы:
      1) Выбранные параметры в url должны идти через разделитель (по умолчанию дефис)?
      2) Значения для подстановки в текстах идти через запятую? (соответственно, тоже можно будет поменять)
      2.1) Причём последнее из значений должно иметь собственный разделитель, чтобы через " и " разделять.
      3) Такую функцию нужно включать при добавлении нового поля?
      Или же при добавлении поля в правило?
      4) Так как страниц будет много, то они не будут формироваться и храниться в таблице. (для 10 цветов возможно 1023 различные комбинации url-адресов)
      4.1) Отсюда следует, что ссылки на такие «множественные» страницы сформировать не получится.
      5) Роботы умеют ходить по таким страницам (метрика и вообще клики по фильтрам), соответственно, чтобы не попало десятки тысяч подобных страниц: «Белые, красные, зелёные и синие телефоны, планшеты, ноутбуки», это дело нужно как-то ограничивать. Выставлять noindex, nofollow для всех таких страниц?
      6) SEO-практичность таких страниц отсутствует. Почти нет запросов, где ищут что-то одно перечисляя цвета, характеристики. «Красные и синие телефоны», «iPhone 7 64gb, 128gb, 256gb»
      7) В основном, весь этот функционал лишь для красоты адреса для клиента? Ведь даже текст выглядеть будет нечитабельно, при большом количестве выбранных значений.
      (ну и подобное будет работать чуть дольше, так как нужно будет пытаться динамически разделять адрес, а там даже в псевдониме слова могут быть дефисы, находить все значения, сделать подсчёт)

      Я бы ещё предложил просто автоматизировать «двойные значения», но это будет просто кнопка в словаре или в поле «Перемножить значения для Цветов» (при 10 цветах умноженные на 10 цветов получается лишь 45 уникальных пар). Но зато на такие страницы можно будет сделать ссылки (если они будут иметь результаты).
        Антон
        Вчера в 12:31
        0
        Многие требования исходят от СЕОшников, и там где 10 цветов, с тысячей комбинаций, это нормально, ибо эту работу по составлению тысячи страниц будет делать СЕО специалист.
        А Сам заказчик с Вашим плагином работать не будет, ему откровенно накакать на то что это за плагин и что он делает, главное чтобы работа была сделана.
        На вордпрессе есть плагин который делает ЧПУ на любые значения фильтра, но это блин вордпресс, это боль, кровь и разрушения.
          Евгений Шеронов
          Вчера в 16:45
          0
          Раз уж на то пошло, то заказчику «откровенно накакать» и на то, что там делает SEO-шник, лишь бы прогресс какой-то был.
          Поэтому эти вопросы можно и нужно направлять SEO-специалисту, чтобы он подумал хорошенько, а я наконец, получил бы ответы.

          При тысячи комбинаций цветов и столько же комбинаций размеров или чего-либо — будет миллион комбинаций только для одной страницы.

          Плагин я видел, а как он работает — мне не нравится, поэтому и хочу понять, чтобы требования были нормальными, а не от того, что это где-то есть, поэтому здесь тоже нужно.

          Извините, если дальше нагрублю, но мне тут вся ситуация напомнила один сайт, где при нажатию на «Добавить в корзину», прилетает фея (шевеля крыльями), хватает картинку товара и улетает с ней до корзины, но я же не прошу этот вычурный функционал добавить в miniShop2, хотя наверное моей бабушке бы понравилось)

          И да, я не отказываюсь этот функционал сделать и планировал его в компоненте давно, но что-то никому не надо, когда доходит до дела. Ни бесплатно, ни платно. Даже примеров реальных не было.
          Вот скажите, что примерно от Вас требуют SEO-шники по подобному функционалу?

          Конечно, можете финансово проспонсировать это дело и тогда не нужно будет отвечать на вопросы, приводить примеры, для того чтобы я мог понять суть проблемы и найти более лучшее решение.
            Антон
            Вчера в 17:07
            0
            Да нет же, я не пытался как то скинуться с темы, Вы не правильно меня поняли.
            Дело в том что есть проекты где такое нужно не в тысячах вариантов, а хотя бы сотня вариантов.
            например Двери, там 10 цветов, и виды дверей, вот тут это было бы очень важно, чтобы можно было на выбор Красная-металлическая-глухая(Купить Металлическую глухую красную дверь в Москве) я мог задать чпу и нужные титле с дескрипшеном.
            Как раз сейчас делали проект по дверям, вот оттуда растут корни такого запроса, ибо мы поставили плагин этот, и тут столько боли вылезло(По времени затраченому на работы дешевле было бы перенести на модекс и заюзать сеофильр).
            И был другой проект по Домам, где так же хренова туча всего и стоит сеофильтр, Вот там было можно нормально задать параметры ЧПУ в фильтре хоть и не так массово, но хоть как то.
              Евгений Шеронов
              Вчера в 18:05
              0
              Вот про то что пишете, это не относится к множественным значения одного фильтра)

              Правило из разных полей можно с самого появления компонента создавать.
              Разные поля(фильтры) — это как раз цвет(красный) + материал(металлическая) + тип(глухая).
              И урл примерно получается такой (/catalog/dveri/krasnye/metallicheskie/gluhie)

              А здесь же речь шла о том, чтобы автоматически обрабатывать много значений одного фильтра. Чтобы получались страницы такого плана: «Купить красные, зеленые, синие и фиолетовые металлические глухие двери» (/catalog/dveri/krasnye-zelenye-sinie-fioletovye/metallicheskie/gluhie).
              Вам такое нужно?)

              А менять URL, мета-теги, заголовки и другие тексты тоже всегда можно индивидуально для каждой SEO-страницы.
                Антон
                Вчера в 18:17
                0
                  Евгений Шеронов
                  Сегодня в 01:05
                  0
                  Я как раз про это и говорю)
                  Что по 3 параметрам, хоть по 10 разным составляйте страницы.
                  На вашем примере это по 1 параметру из 3 полей:
                  «Оттенок двери» + «Материал покрытия» + «Конструкция».

                  Только как Вы смогли выбрать конкретно на этом сайте?)
                  У меня больше чем 1 параметр не получается выбрать)
                  А понял, это наверно dev-версия.

                  А так, ссылки в фильтрах через SeoFilter тоже можно сделать, если сильно захотеть, но это менее удобно, чем чекбоксы)

                  Ещё раз повторюсь, что это не имеет ничего общего с множественными значениями одного поля. Будете делать на том сайте, чтобы был красивый URL, Заголовки при выборе сразу нескольких оттенков дверей?