ReLinks - редиректы, сеоурлы, мета и титлы для Instant 2

+26
2.57K
Предлагаю опробовать и потестить "плагин" для изменения урлов и прописи заголовков для контента в двойке.

Что умеет

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

Установка

*Замены такие объёмные, чтобы вам не искать, куда и после чего надо что вставить.

1) Выполнить запрос к БД:
  1. --
  2. -- Структура таблицы `cms_loka_relinks_urls`
  3. --
  4.  
  5. CREATE TABLE IF NOT EXISTS `cms_loka_relinks_urls` (
  6. `id` INT(11) NOT NULL AUTO_INCREMENT,
  7. `l_req_uri` VARCHAR(255) NOT NULL,
  8. `l_type` VARCHAR(15) NOT NULL,
  9. `l_target` VARCHAR(255) NOT NULL,
  10. `l_source` VARCHAR(100) NOT NULL,
  11. `l_data` text NOT NULL,
  12. `l_template` VARCHAR(50) DEFAULT NULL,
  13. PRIMARY KEY (`id`),
  14. UNIQUE KEY `l_req_uri_2` (`l_req_uri`),
  15. KEY `l_source` (`l_source`),
  16. KEY `l_req_uri` (`l_req_uri`,`l_type`)
  17. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  18.  
2) Залить содержимое архива в корень сайта.

3) Файл /system/controllers/content/actions/item_add.php:
Заменить:
  1. 87 $form = cmsEventsManager::hook("content_{$ctype['name']}_form", $form);
  2.  
  3. // Форма отправлена?
  4. $is_submitted = $this->request->has('submit');
  5.  
  6. if (!$is_submitted && !empty($category_id)) { $item['category_id'] = $category_id; }
  7.  
  8. $item['ctype_name'] = $ctype['name'];
На:
  1. $item['ctype_name'] = $ctype['name'];
  2.  
  3. $hook = cmsEventsManager::hook('content_form', array('this' => $this, 'form' => $form));
  4. $form = $hook['form'];
  5. $form = cmsEventsManager::hook("content_{$ctype['name']}_form", $form);
  6.  
  7. // Форма отправлена?
  8. $is_submitted = $this->request->has('submit');
  9.  
  10. if (!$is_submitted && !empty($category_id)) { $item['category_id'] = $category_id; }
  11.  
  12. // $item['ctype_name'] = $ctype['name'];
Заменить:
  1. 157 cmsEventsManager::hook("content_after_add", $item);
На:
  1. $item['ctype_name'] = $ctype['name'];
  2.  
  3. cmsEventsManager::hook("content_after_add", $item);
4) Файл /system/controllers/content/actions/item_edit.php:
Заменить:
  1. 66 $form = cmsEventsManager::hook("content_{$ctype['name']}_form", $form);
  2.  
  3. // Форма отправлена?
  4. $is_submitted = $this->request->has('submit');
  5.  
  6. $item['ctype_name'] = $ctype['name'];
На:
  1. $item['ctype_name'] = $ctype['name'];
  2.  
  3. $hook = cmsEventsManager::hook('content_form', array('this' => $this, 'form' => $form));
  4. $form = $hook['form'];
  5. $form = cmsEventsManager::hook("content_{$ctype['name']}_form", $form);
  6.  
  7. // Форма отправлена?
  8. $is_submitted = $this->request->has('submit');
  9.  
  10. // $item['ctype_name'] = $ctype['name'];
Заменить:
  1. 94 if (!$errors){
  2.  
  3. unset($item['ctype_name']);
На:
  1. if (!$errors){
  2.  
  3. // unset($item['ctype_name']);
Заменить:
  1. 114 $item = cmsEventsManager::hook("content_{$ctype['name']}_before_update", $item);
На:
  1. $item = cmsEventsManager::hook("content_{$ctype['name']}_before_update", $item);
  2. unset($item['ctype_name']);
5) Файл /templates/default/controllers/content/item_view.tpl.php:
Заменить:
  1. 3 $this->setPageTitle($item['title']);
На:
  1. $this->setPageTitle(!empty($item['page_title']) ? $item['page_title'] : $item['title']);
6) Файл /system/libs/html.helper.php:
Заменить:
  1. 182 $href = rtrim($href, '/');
  2.  
  3. return $href;
На:
  1. $href = rtrim($href, '/');
  2.  
  3. return cmsEventsManager::hook('href_to_rel', $href);
7) Всё!

Все действия безболезненны для движка, поэтому, если понадобится убрать данную доработку, то надо будет удалить папку /system/controllers/loka_relinks и всё.

Поскольку в двойке много чего глобального, то, для того, чтобы не перебивать другие переменные, методы, папки контроллеров наконец, я решил использовать префиксы. Надеюсь никто не против того, что я "застолблю" за собой loka_ и l_ v

Отписывайтесь о результатах тестирования.


Иллюстрация
0
Cobalt Cobalt 9 лет назад #
Отличный плагин спасибо.
А Вы на заказ плагины пишите?
+1
NeBox NeBox 9 лет назад #
работает, спасибо.

Пункт 4, не
Код PHP:
  1. $form = cmsEventsManager::hook("content_{$ctype['name']}_form", cmsEventsManager::hook("content_form", $form));
а
Код PHP:
  1. $form = cmsEventsManager::hook("content_{$ctype['name']}_form", $form);
0
NeBox NeBox 9 лет назад #
не сохраняет "Добавить редирект со старого адреса"

если УРЛ случайно будет введен который уже существует, то при сохранении белая страница.
0
lokanaft lokanaft 9 лет назад #
В инструкции поправил, спасибо.
не сохраняет "Добавить редирект со старого адреса"
Какая последовательность действий? Я по всякому проверял - добавляется редирект.
если УРЛ случайно будет введен который уже существует
А за адресами нужно следить конечно. 2 одинаковых адреса в таблицу не запишутся.
0
NeBox NeBox 9 лет назад #
lokanaft:
Я по всякому проверял - добавляется редирект.
не. чекбокс не сохраняет выбранным, если редактировать запись.

lokanaft:
А за адресами нужно следить конечно. 2 одинаковых адреса в таблицу не запишутся.
ну это понятно, что следить нужно. Дело то в том, что если записей много, то это достаточно накладно.
Я, например, делал(в другом движке) при добавлении проверку на дубли и если УРЛ в БД уже есть, то просто добавляем к УРЛ нумерацию(как стандартно, кстати, реализовано в icms).

А по поводу белой странице - то ошибку писать хотя бы, чтобы понятно было в чем косяк.
0
lokanaft lokanaft 9 лет назад #
Чекбокс всегда снят, он не служит указателем того, что редирект есть. Главное, чтобы страница открывалась по нужному адресу, а по старому её редиректило на этот. Также во всех списках контента урл должен быть новый.

С белой страницей - это не ко мне) Позже я добавлю функционала и для категорий, там и сделаю проверки. Сейчас проблема не в том, как это проверить, а как корректно вернуться назад к редактированию)
0
NeBox NeBox 9 лет назад #
он не служит указателем того, что редирект есть
А. Тогда понятно.
0
Fatum Fatum 9 лет назад #
На мой взгляд крайне полезный функционал, плусанул.
Вопрос - при обновлениях Instant 2 данное усовершенствование не слетит?
Я полагаю что подобное нововведение (по крайней мере сама идея) имеет право войти в очередное обновление и стать стандартом.
0
SJen SJen 9 лет назад #
Вопрос - при обновлениях Instant 2 данное усовершенствование не слетит?
слетит, конечно)
Если у R2 в обновлении будут поправленные файлы, то они перезатрут данный плагин (что логично, как же иначе).
0
Александр Александр 9 лет назад #
Нужный плагин, без всяких споров.
Но есть вопрос, а раширение ссыллок менять можно? На пример с .html на .php
Просто есть сайт, сделанный сугубо на PHP и расширение всех страниц соответственно в PHP, а хочу перенести сайт на двойку и чтобы ссылки все сохранить, потому как сайт не плохо проиндексирован и имеет хорошую посещаемость. Поэтому и такой интерес к вашему плагину.
+1
lokanaft lokanaft 9 лет назад #
Добавил скрин в пост.
0
Александр Александр 9 лет назад #
Вот это круто! Как раз то, что надо! ++++++++++
0
Сергей Сергей 9 лет назад #
Хороший плагин, проверил, вроде работает нормально всё...
Такой вопрос:
А если этот плагин будет управлять к примеру 1000 страницами, сильно ли возрастёт нагрузка из-за такого количества запросов???

Еще от автора

Ajax подгрузка контента для двойки
Ну что, товарищи, сегодня вы своими руками сможете сделать ajax подгрузку записей контента.
AJAX подгрузка комментов для двойки
Как следует из названия, дополнение ограничивает полный вывод всех комментов записи и позволяет пользователю при необходимости посмотреть следующие.
ContentWatch - проверка уникальности добавляемого контента для icms2
Компонент позволяет проверять уникальность текста с помощью сервиса Content-Watch.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.