Если вам нужно только тематические изображения для работы AJAX, это может быть проще отказаться от drupal_render($node->content['the_field'])
в пользу вызова theme_imagecache()
непосредственно:
return theme('image_cache', $presetname, $path, $alt, $title, $attributes, $getsize);
Очевидно, что вы должны были бы получать информацию изображения/поля себя до этого, и множество $ presetname в соответствии с вашим аргументом URL. В вашем интерфейсе js вам нужно будет отрегулировать логику замены, чтобы действовать только на изображении, в отличие от замены всей разметки поля.
Если вам нужна все поле разметка в соответствии с предложением вашего вопросом, я бы реализовать переопределение theme_imagecache()
, добавив логику, чтобы изменить это $ запрограммированной переменный, основанные на непосредственном осмотре пути:
function theme_imagecache($presetname, $path, $alt = '', $title = '', $attributes = NULL, $getsize = TRUE) {
// NOTE: Assuming an AJAX callback path of 'your/ajax/callback/preset_name'
// Get all path elements
$path_elements = arg();
// Pop the last element, as it will be the preset, if the rest matches below
$preset_name = array_pop($path_elements);
// Prepare the rest for comparison below
$leading_path = implode('/', $path_elements);
// Do we have a preset, while being on the right path?
if (isset($preset_name) && 'your/ajax/callback' == $leading_path) {
// Yes, adjust the preset
$preset = $preset_name // might need conversion from path element to preset name first, if not the same
}
// Add copy of original theme_imagecache function here ...
}
Это «быстрый & грязный» способ. Если вы хотите прислушаться к предупреждению «избегать использования», указанному в arg() function documentation (а также избегать использования глобальной переменной), вы можете «передать» имя предварительной настройки в переопределение темы с помощью статической переменной в вспомогательной функции:
function yourModule_imagecache_preset_override($override = NULL) {
static $preset;
if (isset($override)) {
$preset = $override;
}
return $preset;
}
Вы бы назвали это первым из своего обратного вызова меню AJAX, передав заданное переопределение, определенное по URL-адресу, чтобы оно сохранялось в статической переменной. В своем theme_imagecache()
переопределении вы можете вызвать его снова без каких-либо параметров. Если он возвращает NULL, вы просто начинаете как обычно, используя стандартную предустановку. Если он что-то вернет, вы будете использовать это вместо стандартного, так как теперь вы знаете, что это запрос, сделанный для вашего обратного вызова AJAX.
Ну, я изменяю предустановки imagecache, но я возвращаюсь больше, чем просто изображение, я возвращаю целую многогрупповую группу CCK. Статическая переменная звучит интересно, мне нужно посмотреть, смогу ли я ее каким-то образом интегрировать. – Karl
Если вы в конечном итоге используете статическую переменную, вы можете сделать ее более «интуитивной» для использования, добавив явную функцию «setter», превратив приведенный выше пример в «getter». Версия установщика будет единственной, вызывающей версию getter с параметром.Вы можете найти этот «шаблон», применяемый регулярно в ядре Drupal, например, с помощью 'menu_set_item()'/'menu_get_item()' pair. –
Это работало как шарм! Большое спасибо! – Karl