Всего 122 787 комментариев

Алексей Карташов
26 марта 2013, 22:09
0
Кстати, по 2му пункту — можно брать хэш от имени сниппета и строковых представлений имён параметров и их значений (предварительно отсортировав имена параметров по имени, например). Тогда да — мы будем однозначно идентифицировать каждый вызов каждого сниппета. Но ИМХО — это ещё одна совершенно лишняя нагрузка. Хотя идея рабочая.
Алексей Карташов
26 марта 2013, 22:02
0
> если только не прописывать работу с заголовками каждому используемому сниппету.
Именно. Но это такое не благодарное дело получится.
Но если уж заморачиваться, то логика должна быть примерно такой:
КАЖДЫЙ сниппет при КАЖДОМ своём выводе должен сверять ПРЕДЫДУЩУЮ выводимую им информацию с ТЕКУЩЕЙ выводимой им информацией. Т.е. надо завести отдельную таблицу и хранить там, к примеру, md5 от выводимых сниппетом данных и дату этих данных. И если md5 от текущих данных отличается от md5 из таблицы, то перезаписывать md5 и дату.
Потом на то же событие «OnLoadWebDocument» проверять количество сниппетов, в которых данные изменились с последнего вызова (эту переменную можно держать в сессии и каждый сниппет при необходимости инкрементирует её). И если это количество отлично от нуля, то отдавать 200. Иначе отдавать 304 (естесственно, не забыть проверять и дату последнего редактирования ресурса, как в текущем варианте).

НО:
1. Мы здесь теряем одно преимущество этого заголовка — снижение реальной нагрузки на сервер (это при достаточно годной посещаемости). Ведь фактически нагрузка увеличится! Это +1 запрос к вызову каждого сниппета и, если использовать md5, то ещё и на хэширование ресурсы тратить.
2. Как определить уникальность вызова сниппета и однозначно идентифицировать его в нашей специальной таблице?

В принципе, можно написать сниппет-обёртку (как getPage), который будет делать всю эту грязную работу. Ну и плагин доработать слегка.
Для поисковиков будет хорошо, да. Эту задачу этот сниппет+плагин будет решать.

Но со вторым «НО» из списка выше пока не понятно. Да и популярностью данное решение пользоваться не будет — оно сложно для понимания и оборачивать нужно КАЖДЫЙ вызов КАЖДОГО сниппета, что, естесственно, подавляющее большинство делать не будет.

Да и кому это вообще надо-то?))) Нафига я всё это писал? xDD
Александр Котлов
26 марта 2013, 21:27
0
Примерно вот так:
<form class="" method="get" action="[[~[[*id]]]]">
<select name="query" value="[[+mse.query]]">
[[!GetResources?
&tpl=`select-tpl`
&parents=`50`
&depth=`0`
&includeTVs=`1`
&processTVs=`1`
&tvPrefix=``
&sortby=``
&sortdir=``
&sortbyTV=``
&sortdirTV=``
&showHidden=`1`
&hideContainers=`0`
]]
<input type="submit"  value="Подобрать">
</form>
<div id="mItems" ></div>
<p>[[$mFilter]]</p>
Василий Наумкин
26 марта 2013, 21:27
0
Не знаю, не подключал.

Судя по записям в логе — что то не так с ключами. Можно еще попробовать разлогиниться с сайта и почистить кэш бразуера. Настройки кэшируются в сессии, это может помешать как-то.
Перетягин Илья
26 марта 2013, 21:25
0
Правильно, ничего удивительного, я бы на твоем месте еще реже отвечал.
Василий Наумкин
26 марта 2013, 21:22
0
Это оттого, что нужно — &includeTVs=`1`

Ну и еще бы &limit=`0` добавить, чтобы индексировались не 10, а все товары.
Василий Наумкин
26 марта 2013, 21:18
0
Нужно еще учитывать, что Василий работает часов 10 — 12, а потом отвечает на вопросы, в свободное время.

Нет ничего удивительного, что на неинтересные вопросы отвечать не интересно.
Перетягин Илья
26 марта 2013, 21:14
0
Я не имел ввиду, не справедливость ))) просто очень часто встречал вопросы за которые — получи «нагоняй», по сути правильно, но в грубых формах и без ссылок на доки, да, очень много спецов которые хотят получить все готовое и т.д…
Общая суть — этот сайт так или иначе поддерживает уровень не дилетантов и такие вопросы как — «Можно пошаговую инструкцию по применению данного снипета.» почти всегда игнорируются.
Василий пойми правильно — я за такие методы. )))
Василий Наумкин
26 марта 2013, 21:06
0
Глюк корзины может быть только от глюка сессии.

А глюк сессии может быть либо от php-apc, либо оттого, что браузер ориентируясь на заголовки что-то не грузит.

Я одно время интересовался этой темой и пришел к выводу, что она не перспективна. Время и силы лучше потратить на оптимизацию сервера и скриптов, чем на глючное кэширование.
Андрей
26 марта 2013, 21:06
0
Давайте объясню как я делаю, наверное сразу будет ясно в чем соль.

1) качаю, ставлю mSearch из репозитория

2) на одной из страниц сайта пишу в контент документа:
[[!mSearch?&indexer=`1`&includeTV=`1`&includeTVList=`new,color,tags`]]
3) захожу на страницу, вижу:
Indexed: 10 resources from 10, time: 0.0653119087219
4) создаю страницу — поиск. в нее добавляю вызов сниппета:
[[!mSearch]]
5) добавляю на страницу поиск форму:
<form action="[[~[[*id]]]]" method="post"><input type="text" name="query" value="[[+mse.query]]" /> <input class="btn btn-success" type="submit" value="Искать!" /></form>
Дак вот, если post меняю на get — редиректит на главную страницу.

Соль в том, что сейчас поиск заработал ) еще раз все повторил. НО вопрос актуален.У меня не проиндексировались поля color,tags (из minShop2). Хотя я вызвал индексирование же с правильными параметрами или как?
Василий Наумкин
26 марта 2013, 21:04
0
Полностью согласен.

В MODX это просто не имеет перспектив, если только не прописывать работу с заголовками каждому используемому сниппету.
Василий Наумкин
26 марта 2013, 21:02
0
Откуда уверенность, что mFilter работает с miniShop2?

Поиск будет работать, фильтр — нет.
А редирект на главную говорит о том, что неверно настроена либо форма, либо friendly url. От поиска это точно никак не зависит.
Василий Наумкин
26 марта 2013, 20:59
0
Вот тут написано про принцип работы, там же есть ссылка на рабочий пример (с доступом в админку) и указан страшно секретный параметр &resources=``

а задавать тут этот вопрос… ответ не получите
Ах, этот жестокий несправедливый мир.
Алексей Карташов
26 марта 2013, 20:58
0
Пока искал ответ на ваш вопрос, натолкнулся на занятную статью, в которой есть отсылка на сервис для проверки правильности отдачи этих заголовков.
Так же, на этом сервисе есть 2 занятные статьи, после прочтения которых, вывод (относительно MODx) не такой уж и однозначный…

Дело в том, что у вас идёт проверка на последнее изменение КОНТЕНТА страницы, т.е. последнее сохранение ресурса.
И, если
$modx->resource->editedon <= $lastMod
дата последнего Last-modified, который запомнил клиент (браузер или робот поисковика) больше (или равна) дате последнего сохранения ресурса в modx, то вы отдаёте 304 и клиент эту страницу загружать уже НЕ БУДЕТ.

Но вот нюансы:
— если вы добавили новый ресурс, который должен быть виден в меню;
— или у вас появился новый комментарий к статье;
— или у вас стоит какой-нибудь модуль финансовых сводок, который должен отображать актуальную информацию;
— да мало ли что ещё…
то пользователь этих изменений уже не увидит! Потому что он будет брать эту страницу из своего кэша.

ИМХО вопрос с Last-Modified нужно продумывать ГОРАЗДО тщательнее и на каждом конкретном сайте в индивидуальном порядке. И простым плагином здесь уже не обойтись.
Всё зависит от (кхм) зависимостей данных, отображаемых на текущей странице, от данных на других страницах (к примеру вывод новостей) или сниппетов и модулей (к примеру галереи или комментарии).

Вот такие пироги. Решайте — выбирать вам.
Fedor
26 марта 2013, 20:50
0
нет опыта не у кого?
Андрей
26 марта 2013, 20:33
0
Хорошо. Я отключил поиск с морфологией, теперь не падает, но не работает все равно )
Андрей
26 марта 2013, 20:32
0
нужны поиск и фильтры ) с помощью какого компонента вы делаете фильтры?
Peter Zenin
26 марта 2013, 20:13
0
Пробовал, неизвестный x-type
Peter Zenin
26 марта 2013, 20:12
0
Спасибо!
Сегодня начал смотреть, там все запутано, очень трудно отделить подключение редактора. Да и само подключение слишком сложное. Неужели с этим все так сложно…