Как получить ID текущего редактируемого ресурса?
Для реализации поиска по ресурсам с зависимостью контекста внутри TinyMCE мне необходимо достать context_key ресурса, на странице редактирования которого, соответственно и производится поиск по ресурсам.
В заголовке написал про ID потому что и ID и context_key — это поля таблицы modx_site_content, поэтому разницы и нет. Если знаете, как достать ID, значит знаете как достать и context_key :)
P.S. Файл, в котором производится поиск, подключен к коннектору. Однако при попытке использования $modx->resource->get('context_key'); ничего не возвращается.
UPD. Решил вопрос с помощью ExtJS. В js-файле плагина, в адрес поискового запроса добавил GET-параметр id, которому присвоил MODx.request.id, получил id в файле, на который ссылается XHR в js.
Затем вытянул ресурс по id и взял его context_key. Это на случай, если кому пригодится)
Если кому-то, как и мне, нужен поиск ресурсов в TinyMCE с зависимостью от контекста, могу написать статейку или выложить готовое.
UPD. Узнал, что в ModExt есть MODx.ctx, которая выводит текущий контекст. Это решает проблему с создаваемым ресурсом, у которого нет ID, в следствии чего никак не вытащишь контекст.
В заголовке написал про ID потому что и ID и context_key — это поля таблицы modx_site_content, поэтому разницы и нет. Если знаете, как достать ID, значит знаете как достать и context_key :)
P.S. Файл, в котором производится поиск, подключен к коннектору. Однако при попытке использования $modx->resource->get('context_key'); ничего не возвращается.
UPD. Решил вопрос с помощью ExtJS. В js-файле плагина, в адрес поискового запроса добавил GET-параметр id, которому присвоил MODx.request.id, получил id в файле, на который ссылается XHR в js.
Затем вытянул ресурс по id и взял его context_key. Это на случай, если кому пригодится)
Если кому-то, как и мне, нужен поиск ресурсов в TinyMCE с зависимостью от контекста, могу написать статейку или выложить готовое.
Комментарии: 6
$resource тут хранится кажется объект редактируемого ресурса. Ну или в конечном счете всегда можно дернуть
$_GET['id']
и запросить объект через $modx->getObject('modResource', $_GET['id'])
.
К сожалению не всё так просто. У меня GET-запрос отправляется из js-скрипта(вернее не у меня, а у плагина TinyMCE). php-файл, к которому обращается этот скрипт используется исключительно в качестве обработчика и для возврата результата. Поэтому в этом коде фактически невозможно вытащить из GET id, ибо обращение к нему идет всего с одним параметром — текст для поиска. Ну теперь еще и второй параметр я добавил ctx, который передает ключ контекста вне зависимости от типа ресурса(редактируемый / создаваемый).
Если кому-то, как и мне, нужен поиск ресурсов в TinyMCE с зависимостью от контекста, могу написать статейку или выложить готовое.Если будет время и желание, напишите, пожалуйста, с небольшим описанием. Для меня интересная тема.
Да в принципе это дело не стоит отдельной статьи. Всё достаточно просто.
В файле /assets/components/tinymcerte/js/vendor/tinymce/plugins/modxlink/search.php
заменить следующие 2 строки:
найти строку
Проблема только в одном может быть — если до этого поиск уже производился, то это решение будет работать только в инкогнито, либо в другом браузере, где поиск еще не производился.
Решение — полный сброс куки и кэша браузера.
В файле /assets/components/tinymcerte/js/vendor/tinymce/plugins/modxlink/search.php
заменить следующие 2 строки:
$query = $modx->getOption('q',$_REQUEST,'');
if(strlen($query) < 3) exit();
на следующие 3 строки:$context = $modx->getOption('ctx',$_REQUEST,'');
$query = $modx->getOption('q',$_REQUEST,'');
if(strlen($query) < 3) exit();
А в соседнем файле /assets/components/tinymcerte/js/vendor/tinymce/plugins/modxlink/plugin.min.jsнайти строку
var xhr = new XMLHttpRequest(), _link = encodeURI(TinyMCERTE.editorConfig.modxlinkSearch+'?q='+v);
И заменить её на var xhr = new XMLHttpRequest(), _link = encodeURI(TinyMCERTE.editorConfig.modxlinkSearch+'?ctx='+MODx.ctx+'&q='+v);
Готово.Проблема только в одном может быть — если до этого поиск уже производился, то это решение будет работать только в инкогнито, либо в другом браузере, где поиск еще не производился.
Решение — полный сброс куки и кэша браузера.
Извиняюсь, немного не так.
Заменить эти строки
Заменить эти строки
$query = $modx->getOption('q',$_REQUEST,'');
if(strlen($query) < 3) exit();
$c = $modx->newQuery('modResource');
$c->where(array(
'pagetitle:LIKE' => '%'.$query.'%',
'OR:alias:LIKE' => '%'.$query.'%',
));
на эти$context = $modx->getOption('ctx',$_REQUEST,'');
$query = $modx->getOption('q',$_REQUEST,'');
if(strlen($query) < 3) exit();
$c = $modx->newQuery('modResource');
$c->where(array(
'context_key' => $context,
'pagetitle:LIKE' => '%'.$query.'%',
));
$c->orCondition(array(
'id:LIKE' => '%'.$query.'%',
));
Спасибо, большое!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.