Заставляем работать модуль "File (Field) Paths" в Drupal 7

Главные вкладки

Аватар пользователя smmyuzer smmyuzer 21 сентября 2014 в 17:51

Недавно при создании одного проекта, мне понадобилось сделать автоматическое переименование картинок и любых других загружаемых файлов в поле. По скольку я понятия не имел какой модуль для этого нужен я полез в поиск, и нашел модуль "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.

Комментарии