Алексей Карташов

Алексей Карташов

С нами с 04 февраля 2013; Место в рейтинге пользователей: #58
Алексей Карташов
28 марта 2015, 16:00
0
Понятное дело, но всеми ими я не пользуюсь, а вот vp теперь будет постоянным гостем на моих сервисах)
Алексей Карташов
27 марта 2015, 20:05
0
Просто если бы все знали как правильно написать этот каноникл, то такой сниппет был бы не нужен. Но знают же не все)

Кстати,
[[Canonical]]
отработает быстрее, чем
<link rel="canonical" href="[[~[[*id]]? &scheme=`full`]][[+page:isnt=`1`:then=`?page=[[+page]]`]]"/>

И писать меньше :)
Алексей Карташов
27 марта 2015, 19:44
+2
Вов, спасибо, всё работает!

Думаю что правильнее будет указание схожего обработчика только с другим методом запроса.
Это было первым, что я попробовал сделать) Да только вот в тот момент получал ae-ошибку. Already exists, тобишь.

Спасибо огромное за обкатку!
Вам спасибо)

Добавил создание одинаковых маршрутов с разными методами
И всё-таки мне кажется, что логичнее было бы сделать третий вариант — POST/GET, который бы реагировал на оба этих request-метода, чтобы не дублировать и не плодить одинаковые маршруты с одинаковыми обработчиками.
Т.е. исключительно POST, исключительно GET и вариант, реагирующий на всё, который бы был включён по умолчанию.
Когда у меня в компонентах по несколько десятков сущностей, с каждой из которых нужны crud-операции с фронта — конфиг сильно раздуется. Это, конечно, не смертельно. Так, просто пожелание :-)

Кстати. Мы тут недавно канонические урлы обсуждали и я там сниппет для seo-шного тега meta rel=canonical накидал. Так вот встал вопрос — а как получить сработавший маршрут из VirtualPage, чтобы подставлять их в этот тег, вместо [[~[[*id]]]]? Есть какие-нибудь варианты как это можно сделать? Может сработавший урл в плейсхолдер помещать? Имя которому задавать в настройках компонента. Тогда можно было бы делать как-то так:
$vpUri = $modx->getPlaceholder($modx->getOption('vp.uri_placeholder'));
Алексей Карташов
26 марта 2015, 18:22
+2
Только что столкнулся вот с таким поведением.

Допустим, нужно вывести форму редатирования профиля пользователя (или любого кастомного объекта).
Урл страницы имеет вид:
/objects/100500/update
Прописываю в vp.конфиге вот такой маршрут:
/objects/{itemId:[0-9]+}/{update}
выбираю метод GET и любое из событий.

На нужном ресурсе грузится форма редактирования, в которую подставляются значения нужного объекта (который был предварительно найден и отрендерен собственным сниппетом).

Т.е. я к чему — всё работает, всё супер.

Но.
Как только я нажимаю кнопку сабмита в форме — всё, пиши пропало — отдаётся 404.

В массиве REQUEST лежат и данные из формы, и параметр q с урлом.
Метод $virtualpage->getMethod() возвращает $_SERVER['REQUEST_METHOD'].
И вот нюанс — если request-метод равен POST, то в этом массиве параметра q нету. Оно и понятно — в этот момент он спокойно лежит в $_GET. И, соответственно, VP подцепить урл уже не может.
Вот и валится на 404.

Но ведь это же не правильно!
Как же быть?

Предлагаю свой вариант решения такой ситуации.
Там добавилась константа и немного дописан метод doRoutes. По коду, в принципе, всё понятно, но, в случае чего, пишите.

Надеюсь, что коммит примите и мне не нужно будет держать свою ветку VirtualPage)

p.s. А компонент очень полезный. Так что, спасибо за него!
Алексей Карташов
26 марта 2015, 10:17
0
Хм, ну может у меня nginx такой путь разруливает — не знаю. Но факт остаётся фактом — на сайте настроено всё, как в статье, и такой урл отдаёт 404
Алексей Карташов
26 марта 2015, 09:46
0
Скорей всего, на это влияет какая-то из этих настроек:
friendly_urls_strict
request_method_strict
Алексей Карташов
26 марта 2015, 09:33
0
Ну так у меня 404 отдаёт. Не вижу здесь никаких проблем — всё так, как дОлжно быть.

А то, что на отдельно взятом сайте вместо ожидаемой 404 отдаётся 200 ОК, так это проблемы отдельно взятого сайта, а не modx'а в целом.
Алексей Карташов
26 марта 2015, 01:24
0
А, с VirtualPage'м такой трюк не сработает, да.
Хотя надо будет код его посмотреть — может быть там можно будет как-то получить текущий сформированный урл из сниппета и его подставлять. Либо… Ну тут есть варианты. Руки дойдут — посмотрю, как лучше сделать.
Алексей Карташов
26 марта 2015, 01:14
0
Это на modx-сайтах такое? Подобного я, вроде, не видел.
На каких-нибудь вордпрессах или dle — да, там вроде есть такое. Но вот на modx?
Алексей Карташов
26 марта 2015, 01:13
1
0
Этот сниппет может принимать один параметр args, в который можно передать строку запроса вида «qwe=asd&zxc=123» либо json-строку, пригодную для преобразования в массив и последующей его передачи в php-функцию http_build_query.
Всё ж уже учтено. В этот параметр можно передавать какие угодно параметры строки запроса.

+ я сейчас немного подправил сниппет, чтобы можно было сделать следующее:
1. Врубаем pdoParser, который идёт в комплекте с pdoTools, чтобы можно было получать значения глобальных массивов прямо в шаблонах и чанках;
2. И пишем в шаблоне вот такое:
<!-- получаем переменную из строки запроса (допустим её значение равно "123"), делаем её xss-безопасной и создаём из неё плейсхолдер: -->
[[!#GET.var_from_query_string:htmlentities:toPlaceholder=`var_from_query_string`]]
<!-- [[+page]] - это плейсхолдер, к примеру, от pdoPage. Допустим он равен "2". -->
<!-- [[+vp.some_var]] - это плейсхолдер, к примеру, от VirtualPage. Допустим он равен "qweqweqwe" -->
<!-- делаем первый элемент json-массива с пустым ключом и пустым значением. сниппет его подчистит -->
[[!Canonical?
  &args=`{"":""
    [[!+var_from_query_string:notempty=`,"param": "[[+var_from_query_string]]"`]]
    [[!+page:notempty=`,"page": "[[+page]]"`]]
    [[!+vp.some_var:notempty=`,"some_var": "[[+vp.some_var]]"`]]
}`
]]

На выходе получим вот такой тег:
<link rel="canonical" href="http://your-site.ru/your-page?param=123&page=2&some_var=qweqweqwe" />

Если ни один плейсхолдеров не будет иметь значения, всё-равно в сниппет попадёт валидная json-строка, у которой будет один единственный элемент, у которого не будет ключа. Сниппет такой элемент удалит и передаст в modx'овый построитель урлов пустой массив — и ничего не сломается.
А на выходе будет простой урл, без параметров запроса:
<link rel="canonical" href="http://your-site.ru/your-page" />

И нагрузка на парсер совершенно не существенная.
Алексей Карташов
26 марта 2015, 00:21
0
Ну вот к слову сказать, у Яндекса много косяков на своих же контентных сервисах, которые в прямую расходятся с его же собственными рекомендациями.
Но это ж Яндекс) Он может себе такое позволить)
Алексей Карташов
26 марта 2015, 00:03
0
Мужики то тут за срач устроили?
Где срач? Какой срач? :)

Ааа, так вы про то, что выше!
Так то — не срач! То — лишь беседа трёх господ, не схожих в мненьи :)
Алексей Карташов
25 марта 2015, 23:36
0
Его дело.
Да это понятно) Мне, наверно, надо было в пред-предыдущем комменте тег сарказм поставить — я ж и правда не всерьёз :)

Пишет по сути.
Воды мало, согласен. Он типа арбайтена, только не такой категоричный. И грамотнее)
Алексей Карташов
25 марта 2015, 23:28
0
Да это шутка юмора там такая, у него на блоге. Он же там начал задвигать всякую инфу за коврижки. Хотя писал, что никогда никакой информации продавать не будет. А потом пошло-поехало)
Алексей Карташов
25 марта 2015, 23:22
0
Жорик стал инфобизнесменом, не верь ему xD
Алексей Карташов
25 марта 2015, 23:16
0
Я работал программистом в топовой seo-конторе, автоматизируя seo-прихоти seo-шников, считая всё это магией.
После — работал оптимизатором уже в фирме попроще, региональной, но в моём регионе одной из самых известных и узнаваемых. После этой работы к seo отношение поменялось.
А ещё мой друг, после моего курса обучения, устроился работать директологом в агентство, которое занимается исключительно контекстом, которое входит в топ-10 интернет-агентств.

Так что не надо мне тут авторитетом давить.

потому что они более аффилированны между собой, чем ты знаешь.
И вот опять ты за меня решил, что я чего-то там не знаю. Я тебе сам могу столько всего невыдуманного об аффилированности порассказывать — уши завянут.
Так что давай в эту полемику ударяться не будем.

Да и вообще давай закругляться — обсуждение зашло в тупик. С самого начала было понятно, что все и так останутся при своём мнении. Для чего ты начал этот холивар? Хз. От чсв, наверное.
Алексей Карташов
25 марта 2015, 23:11
0
Мужик, вот больше всего меня раздражает передёргивание фактов и неподкреплённые субъективные заявления.

Просто понимаешь, что это все догадки.
Субъектив. Опытом всё подкрепляется. Опытом. Которого у тебя, вроде как, нет.

SEO как религия.
И да, и нет. Да — для тех, кто в этом не разбирается. Нет — для тех, кто экспериментирует и внедряет.

Но просто есть люди, которым выгодно поддерживать мифы
Да, но это относится как раз к покупке ссылок. Мифы эти сеют те, которым выгодна эта самая продажа — сапы, сеопульты и прочие прожигатели космоса.
поэтому появляются всякие сакральные термины, типа «траст», «ап», «новый алгоритм», «зоопарк»
Откуда это в твоей голове? Всё, что ты перечислил (кроме «зоопарк» — это я вообще хз, что ты имел в виду, не слышал о таком) — это вполне себе официальная терминология, на которой разговаривают, в том числе, сотрудники того же Яндекса.

Как-то помнится, ты вызывался оптимизировать kino-govno. Что из этого получилось? После введения всех этих доработок посещалка подросла?
Мы проделали большой объём работ. Но не достаточный. Потому что… А впрочем не важно. Несколько причин есть.
И да, посещалка не подросла. Но она не скатилась в полное говно после переезда новый домен. Хотя история знает тысячи случаев, когда после смены доменов сайты полностью вылетают из индекса.

Super Modx optimized
Статья называется по другому. Но такое название — это для привлечения внимания.

только забыли несчастный base href убрать от туда почему-то.
Потому Василий — не зелёный новичок и знает как им пользоваться и сделать так, чтобы он не мешал. Повторю, если ты этого ещё не понял, к seo этот тег не имеет никакого отношения.
Алексей Карташов
25 марта 2015, 22:46
0
С чего ты взял что я что-то решил за кого-то?
Смотрим:
Не может же гугл позволить себе армию ассесеров.
С чего ты это решил? Или не решил?
А для Яндекса и 100 или 1000 ассесоров хватит.
А это ты с чего решил? Или не решил?

Сперва ты говоришь одно, потом ты говоришь, что такого не говорил. Ок.

то получается (из предыдущего коммента) решил, что без 301 редиректа теряются много вычислительных мощностей и поэтому поисковикам важно это. Почему ты так решил? Что они не могут позволить себе это? Тупые что ли?)
Может потому, что они сами об этом пишут? Как прямые рекомендации для вебмастеров? Не? Не слышал?

Но, по-моему, ты нихрена не понял, извини. Либо ничего из написанного мной не читал.
Алексей Карташов
25 марта 2015, 22:31
0
Как ты лихо тут за Яндекс с гуглом решил чего им хватит, а чего не хватит; чего они могут себе позволить, а чего не могут.
А они-то (вот ведь тупенькие!) о своих возможностях и потребностях, наверно, даже и не догадываются! xD