Внесены изменения - подробнее в конце статьи.
Ну что же, как говориться, клиенту доверяй, но проверяй. И правда, зайдя на сайт клиента и попробовав работоспособность расширений, выяснилось, что редиректов нет. То есть, каждое расширение работает, в панели администратора, устанавливается без ошибок, но вот перенаправления нет.
Можно было бы покопаться, поискать, где порылся, лучший друг человека, но не в рамках оговоренного бюджета. Так как, я бы потратил кучу времени на это дело. А, ведь вокруг столько интересного и нужного, что можно поделать и за что тебе дадут билеты банка России. В общем, не стал заморачиваться, как говориться чужой код потемки и лезть туда не смей, ну если нет должной мотивации.
Когда-то давным-давно, когда деревья были большими, я что-то подобное делал для какого-то клиента, но на MODX Evolution. А, я сущность хозяйственная и всё, так сказать в дом, точнее в папочки на свой накопитель. Специально использовал слово накопитель, ибо накопил там уже много разных ништяков, в виде файликов, в которых есть интересные решения той или иной задачи. Ну да, отвлёкся, наша цель редирект для MODX Revolution, спонсором данного предложения, стала местная банда SEOшников, в моём лице.
Редирект для MODX Revolution
Создаём плагин, как назвать, ну я назвал Redirect, кэп с Вами, други! Затем идем на вкладку "Системные события" и, о, как неожиданно да, ставим галку в событии OnPageNotFound. Не забываем сохранить.
Код самого плагина:
$mapChunk = $modx->getChunk('mapRedirect'); $mapLines = explode("\n",$mapChunk); $mapArr = array(); foreach($mapLines as $line) { list($link,$redirectId) = explode('||',$line); $mapArr[$link] = $redirectId; } $q = $_SERVER['REQUEST_URI']; if(isset($mapArr[$q])) { if(is_numeric($mapArr[$q])){ $url = $modx->makeUrl($mapArr[$q]); $modx->sendRedirect($url,array('responseCode' => 'HTTP/1.1 301 Moved Permanently')); }else{ $url = $mapArr[$q]; $url = 'Location: '.$url; header($url,true, 301); } }
Как Вы, уже заметили в коде я вызваю чанк mapRedirect, кэп все еще с Вами, это именно карта редиректов, создаём его. И уже в нём заносим всё редиректы, которые нам нужны в следующем формате:
<урл с которого редирект>||<урл или ID ресурса куда должен вести редирект>
Да, да, я не ошибся урл или ID ресурса, видели is_numeric, вот тут и происходит магия. Определяет цифра или нет, ну и дальше уже генерирует урл через makeURL или просто использует то, что там есть.
Важно, урлы в чанке mapRedirect должны быть без домена и начинаться со слеша /, при этом каждый новый редирект должен идти с новой строки.
Собственно, на этом всё. Успеха и отличного настроения, Вам!
П.С. Доработал, теперь работает не только с ID ресурса, но и URL (важно, урл куда идёт перенаправление, должен быть полным)