Недавно при создании одного проекта, мне понадобилось сделать автоматическое переименование картинок и любых других загружаемых файлов в поле. По скольку я понятия не имел какой модуль для этого нужен я полез в поиск, и нашел модуль "File (Field) Paths" прочитав через гугл переводчик его описание я понял что этот модуль походит, и наконец то закончится переименование картинок в ручную перед загрузкой на сайт.
Установив модуль на сайт конечно же ничего не заработало, картинки не переименовывались да и в добавок после сохранения ноды выскакивало системное сообщение с ошибкой «Deprecated function: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in _filefield_paths_replace_path() (Line 328 in /var/www/xxx/sites/all/modules/filefield_paths/filefield_paths.module).» я конечно с расстроиным видом полез снова в поиск, вбив в строку поиска саму ошибку, и вычитал на друпал орг что нужно пропатчить модуль и ошибка пропадет, вот кстати данный пост https://www.drupal.org/node/2103151 и в нем как раз приложен код самого патча.
Меня конечно найденный пост обрадовал но дело в том что понятие не имел как нужно патчить модуля, и снова порывшись в поиске нашел решение но кривоватое, знающие люди это конечно делают по другому, вроде как я понял через командную строку.
Вообщем теперь к самому делу, в папке модуля File (Field) Paths вам нужно найти файлик «filefield_paths.module» открыть его через редактор которым вы пользуетесь, далее вам нужно открыть в том же редакторе код патча который прикреплен в посту, ссылка выше, в коде патча строки помеченные минусом нужно удалить из файла «filefield_paths.module» а строки с плюсом добавить на место удаленных строк.
Вот сам код патча:
<?phpdiff --git a/filefield_paths.module b/filefield_paths.module
index 2f9dfce..6f35623 100644
--- a/filefield_paths.module
+++ b/filefield_paths.module
@@ -310,24 +310,27 @@ function _filefield_paths_replace_path($old, $new, $entity) {
// Build replacement.
$info = parse_url(file_stream_wrapper_uri_normalize($new));
$info['path'] = !empty($info['path']) ? $info['path'] : '';
- $replacement = "_filefield_paths_replace_path_uri_scheme('\\1', '{$old}', '{$new}') . '\\2{$info['host']}{$info['path']}'";
+ $replacement = "_filefield_paths_replace_path_uri_scheme(\$matches[1], '{$old}', '{$new}') . \$matches[2] . '{$info['host']}{$info['path']}'";
// Newer versions of the Image module add an 8 character token which is
// required if the image style hasn't been generated yet. Look for this token
// in the query string and replace it.
if (defined('IMAGE_DERIVATIVE_TOKEN')) {
- $regex .= '(\?(\S+?&|)' . IMAGE_DERIVATIVE_TOKEN . '=(\S{8})|)';
- $replacement .= " . _filefield_paths_replace_image_derivative_token('{$old}', '{$new}', '\\5', '\\7', '\\3')";
+ $regex .= '(\?(\S+?&|)' . IMAGE_DERIVATIVE_TOKEN . '=(\S{8})|())';
+ $replacement .= " . _filefield_paths_replace_image_derivative_token('{$old}', '{$new}', \$matches[5], \$matches[7], \$matches[3])";
}
+ // Create an anonymous function for the replacement via preg_replace_callback.
+ $replacement_callback = create_function('$matches', "return {$replacement};");
+
$fields = field_info_fields();
foreach ($fields as $name => $field) {
if ($field['module'] == 'text' && isset($entity->{$field['field_name']}) && is_array($entity->{$field['field_name']})) {
foreach ($entity->{$field['field_name']} as &$language) {
foreach ($language as &$item) {
- $item['value'] = preg_replace("/$regex/e", $replacement, $item['value']);
+ $item['value'] = preg_replace_callback("/$regex/", $replacement_callback, $item['value']);
if (isset($item['summary'])) {
- $item['summary'] = preg_replace("/$regex/e", $replacement, $item['summary']);
+ $item['summary'] = preg_replace_callback("/$regex/", $replacement_callback, $item['summary']);
}
}
}?>
Вот в принципе и все, после замены сток ошибка должна пропасть, сразу хочу сказать что пост рассчитан для супер новичков которые только начинают изучать drupal.
Комментарии
спасибо, помогло! ошибка, вернее, сообщение ушло