Tramp1357 10 ноября 2015 9 12
Продолжение топика об исключении алиаса из URL.
Сегодня выяснилось, что указанные мной ссылки ведут в никуда, и я решил восстановить эту информацию, благо, сам постоянно использую эту доработку.



Речь об исключении алиаса ресурса из url дочерних объектов способом, предложенным bertoost, за что огромное ему спасибо.

Были споры о необходимости лезть в ядро, но, тем не менее, интерес к этому есть, поэтому я воссоздал эти изменения на github.

Итак, для этого требуется:

  1. Создать в таблице modx_site_content поле exclude_alias_in_childs (boolean), сделать к нему индекс;
  2. Внести изменения согласно github.com/modxcms/revolution/compare/2.x...Tramp1357:Tramp1357-patch-1
Править modx.mysql.schema.xml не обязательно, если не планируется перепостроение схемы.

Если изменения п.2 внести в стандартный дистрибутив MODX, то необходимость в п.1 отпадает: после установки с нуля всё будет работать из коробки.
12 комментариев
Tramp13571
Tramp1357 10 ноября 2015г в 19:58 #
Почему-то github не показывает изменения в modresource.map.inc.php (я тот еще гитхабер :) ).
Там нужно просто добавить поле exclude_alias_in_childs b и индекс к нему. Если открыть сам файл, то изменения в нем есть.
d
derzaiii 10 ноября 2015г в 19:59 #
Спасибо!
Tramp13571
Tramp1357 10 ноября 2015г в 20:00 #
Пожалуйста
N
Neill003 03 января 2016г в 22:52 #
Здравствуйте.

Можете пожалуйста расписать подробнее 1 пункт:
1. Создать в таблице modx_site_content поле exclude_alias_in_childs (boolean), сделать к нему индекс;

Хотя бы просто выложите скриншот, как это должно выглядеть в итоге.
d
derzaiii 03 января 2016г в 23:03 #
Я думаю если непонятно как это — то это весьма опасно делать Вам самим.
Это делается в базе. Я делал через PhpMyAdmin
N
Neill003 03 января 2016г в 23:12 #
Да опасного мало) Я тестирую на локальном хостинге.
Я нашел в базе таблицу modx_site_content открыл эту таблицу и дальше нажал на вставить, а вот что куда прописывать?((
Да с PhpMyAdmi я пока на вы(((
d
derzaiii 03 января 2016г в 23:18 #
k
kiukishenkaec 01 февраля 2016г в 18:17 #
Сылки на скриншоты не работают. Буду очень благодарен если обновите… очень уж надо…
s
slatkey 02 февраля 2016г в 23:14 #
пожалуйста обновите скриншоты
Tramp13571
Tramp1357 03 февраля 2016г в 11:12 #

s
slatkey 03 февраля 2016г в 11:28 #
Большое спасибо!
k
kiukishenkaec 03 февраля 2016г в 11:33 #
Александру спасибо за скрины!
Tramp13571
Tramp1357 03 февраля 2016г в 12:27 #
Более простой способ — внести все изменения в файлы дистрибутива. Тогда все встанет автоматом при установке. И база тоже будет создана как надо.
k
kiukishenkaec 03 февраля 2016г в 13:02 #
а есть ли подробная инфа на русском о том в каких файлах и какие изменения сделать?
Tramp13571
Tramp1357 03 февраля 2016г в 16:16 #
изменения нужно делать те, которые указаны на github по ссылке в топике. Русской информации нет. Скажу больше — ее нет и на английском. Я в свое время не один день потратил на поиски. Нашел случайно, когда уже отчаялся. А через пару месяцев те ссылки перестали работать, собственно, поэтому я и создал этот топик.
k
kiukishenkaec 03 февраля 2016г в 18:39 #
«Русской информации нет. Скажу больше — ее нет и на английском.» — я уже лично убедился в этом. Перелопатил весь интернет и ничего не нашёл.
Сделал всё по инструкции как описано тут github.com/modxcms/revolution/compare/2.x...Tramp1357:Tramp1357-patch-1 — ВСЁ РАБОТАЕТ ОТЛИЧНО!
Информация на вес золота )). Огромное спасибо.
Tramp13571
Tramp1357 03 февраля 2016г в 18:49 #
Рад помочь :)
N
Neill003 03 января 2016г в 23:21 #
Для меня это многое объяснило! Спасибо за помощь, буду разбираться!
Tramp13571
Tramp1357 01 февраля 2016г в 21:18 #
Если эти изменения внести в стандартный дистрибутив MODX, то после установки все будет работать из коробки.
s
slatkey 02 февраля 2016г в 23:17 #
тема очень насущная. Кто нибудь может сделать пару скриншотов для новичков из phpMyAdmin ?
Д
Дмитрий Стрельников 15 февраля 2016г в 15:10 #
Здравствуйте! Спасибо огромное за информацию!
Пункт «Не использовать в URL» успешно добавился, но при попытке заменить modresource.map.inc на взятый с гитхабера сайт слетает… можно поподробнее про поле exclude_alias_in_childs b и индекс к нему?
Tramp13571
Tramp1357 15 февраля 2016г в 18:29 #
Не нужно заменять полностью файлы, поскольку он может отличаться в разных версия MODX. Нужно просто добавить строку с описанием поля exclude_alias_in_childs.
Fi1osof1
Fi1osof 15 февраля 2016г в 20:10 #
Саша, не стоит редактировать файлы ядра. Описание колонки лучше в metadata.mysql.php прописать, или плагином.
Tramp13571
Tramp1357 15 февраля 2016г в 21:14 #
Да, это тоже вариант, не подумал.
Просто описал, как сам делаю :)
Fi1osof1
Fi1osof 15 февраля 2016г в 21:15 #
Просто описал, как сам делаю :)
И что потом происходит, когда MODX обновляешь? ;) Или не обновляешь?))
Tramp13571
Tramp1357 15 февраля 2016г в 21:21 #
Да пока 2.3.6 и использую. Про 2.4+ пока не слышал, что ошибку исправили.
Да и при обновлении мне несложно файлы обновить, всё равно ведь в ядро лезть надо :)

Единственно, что я сейчас исключил — это правку базы руками. Я просто в установочном пакете сразу данные про это поле прописываю в modx.mysql.schema.xml — и при установке всё уже есть.
Но php всё равно править приходится.

Хотя согласен, твои идеи очень интересны, буду использовать :)
Fi1osof1
Fi1osof 15 февраля 2016г в 21:37 #
Про 2.4+ пока не слышал, что ошибку исправили.
Ты про эту?
Я пока не отписался с подробностями, но коротко: выяснил в чем проблема. Они давно уже вынесли расширяющие пакеты из системных настроек в отдельную таблицу, но с этим у них косяков куча (я про них им писал еще в 13-ом году), в итоге у них чтение этих записей есть, а создания нет (да, и такое бывает :)). При этом именно при обновлении MODX фигачит эти настройки в отдельную таблицу, но MODX при инициализации по разному обрабатывает данные расширяющих пакетов из системных настроек и отдельной таблицы. В общем, в большинстве случаев помогает просто очистка таблицы modx_extension_packages (только не забывает про бекапы).

Да и при обновлении мне несложно файлы обновить, всё равно ведь в ядро лезть надо :)
Если ты все правильно делаешь, то в ядро не придется лезть.

Единственно, что я сейчас исключил — это правку базы руками. Я просто в установочном пакете сразу данные про это поле прописываю в modx.mysql.schema.xml — и при установке всё уже есть.
Ты и это можешь исключить. Когда пакет устанавливается, ты можешь инициировать свой модуль и выполнить добавление колонки средствами самого MODX-а.
Вот смотри пример:
<?php
$pkgName = 'modImporter';
$pkgNameLower = strtolower($pkgName);

if ($object->xpdo) {
  $modx =& $object->xpdo;
  $modelPath = $modx->getOption("{$pkgNameLower}.core_path",null,$modx->getOption('core_path')."components/{$pkgNameLower}/").'model/';

  switch ($options[xPDOTransport::PACKAGE_ACTION]) {
    case xPDOTransport::ACTION_INSTALL:
    case xPDOTransport::ACTION_UPGRADE:
      if ($modx instanceof modX) {
        $modx->addExtensionPackage($pkgNameLower, "[[++core_path]]components/{$pkgNameLower}/model/", array(
          // 'serviceName' => $pkgName,
          // 'serviceClass' => $pkgName,
        ));
        
        
        $modx->addPackage($pkgNameLower, MODX_CORE_PATH . "components/{$pkgNameLower}/model/", array(
          // 'serviceName' => $pkgName,
          // 'serviceClass' => $pkgName,
        ));
        
        $manager = $modx->getManager();

        $manager->addField('modResource', 'externalKey');
        $manager->addIndex('modResource', 'externalKey');
        
        
        $modx->log(xPDO::LOG_LEVEL_INFO, 'Adding ext package');
      } 
      break; 
        
    case xPDOTransport::ACTION_UNINSTALL:
      if ($modx instanceof modX) {
        $modx->removeExtensionPackage($pkgNameLower);
      }
      break;
  }
}
return true;

Это вот сюда фигачится: github.com/MODX-Club/MODX_SamplePackage/blob/master/_build/resolvers/resolver.register.php
Только в транспортере надо подключить резолвер.
Tramp13571
Tramp1357 15 февраля 2016г в 23:34 #
Ты про эту?
Не, я про эту (наборы параметров)

За информацию спасибо, буду пробовать
Fi1osof1
Fi1osof 16 февраля 2016г в 15:13 #
Нет, это уже в 2.4.2 поправлено, багфикс приняли.
Tramp13571
Tramp1357 16 февраля 2016г в 15:33 #
Да, вчера увидел :)
d
duron16 26 февраля 2016г в 18:47 #
Функция очень удобная и нужная. В Evo пользовался ею, при чем там она идет сразу с коробки. Честно говоря удивило, что такой функционал реализован в EVO и я его не нашел в REVO…
Сегодня пробовал на OpenServer на 2.4.2-pl advanced.
Сама строка «Не использовать в URL» с чекбоксом появилась, даже сохраняет, и в дереве ресурсов добавляет ea, но не работает. Все равно добавляет отключенные ресурсы в путь. Перепроверил дважды…
Tramp13571
Tramp1357 26 февраля 2016г в 19:03 #
Перепроверь github.com/Tramp1357/revolution/commit/d30ba3b9cfaf4ccd1bde17d6c651460b0b9a3a2d
Номера строк такие для версии 2.3.6, в других версиях они могут отличаться.
Еще стоит почистить кэш.
Метод стопудово рабочий, у меня работает на 6 боевых сайтах, не считая тестовых :)
d
duron16 29 февраля 2016г в 11:51 #
Все правильно ) Метод рабочий, это я протупил с одной строчкой )))
K
Konstantin Litvinov 23 июля 2016г в 00:59 #
Столкнулся с такой же проблемой и решил ее банальным CustomURL (https://rtfm.modx.com/extras/revo/customurls) с шаблоном [[+cu.parent_uri]]/[[+alias]]. Чем не метод?
П
Павел Алексеев 23 декабря 2016г в 15:31 #
Спасибо огромное, правда не сразу помогло, ковырял как мог, уж опустил руки и пытался разобраться с CustomURL, но о чудо, заработало
d
duron16 25 декабря 2016г в 19:39 # Отредактировано: duron16 25 декабря 2016г в 19:39
Кстати а как? Я пробовал тоже CustomURL недавно, сильно правда не вникал, но с первых двух попыток ничего не заработало. Можете поделиться инфой? Версия MODx 2.5.2
Tramp13571
Tramp1357 25 декабря 2016г в 19:43 #
в gist все изменения прописаны. Единственное что — нужно не по номерам строк искать, поскольку в разных версиях MODX они могут отличаться. Просто искать именно эти строки и вносить изменения.
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.