Drupal CiviCRM Javascript Conflict - PullRequest
       33

Drupal CiviCRM Javascript Conflict

5 голосов
/ 08 июня 2011

Установил CiviCRM в новой установке Drupal, настроил CiviCRM и добавил данные.Фактический сайт Drupal был построен отдельно в отдельной установке.Теперь, когда все готово, я объединил CiviCRM с новым сайтом Drupal (файлы и база данных).Кажется, что все работает, за исключением входа в CiviCRM: http://example.com/civicrm/dashboard он говорит:

"Javascript должен быть включен в вашем браузере, чтобы использовать функции панели мониторинга."

И даJavascript включен.Меню CiviCRM все сломано и тому подобное.Chrome также сообщает о следующих ошибках:

Uncaught TypeError: Object # не имеет метода 'menu' jquery.textarearesizer.js: 5Uncaught TypeError: Object # не имеет метода 'TextAreaResizer' main.js: 6Uncaught TypeError: Object #не имеет метода 'cycle' jquery.textarearesizer.js: 5Uncaught TypeError: Object # не имеет метода 'TextAreaResizer'

Сжатие JavaScript при работе не включено.Есть идеи?

Ответы [ 2 ]

2 голосов
/ 17 февраля 2012

CiviCRM использует объект jQuery в качестве cj вместо $, чтобы избежать конфликтов с библиотекой Drupal JQuery. Теоретически, они подходят для разных версий, потому что имеют разные пространства имен (которые jQuery официально поддерживает с помощью noConflict ()).

Конфликт, который у вас, вероятно, возникает из-за ваших изменений, заставляющих либо Drupal, либо CiviCRM загружать свою библиотеку jQuery в другой точке начальной загрузки, либо заставляющих ее пытаться загрузить jQuery более одного раза. Это приведет к тому, что операция преобразования $ в cj заберет объект JQuery Drupal после того, как он уже был создан, а не раньше, оставив Drupal и / или CiviCRM без библиотек, которые нужно подключить к объекту $ (вместо этого вы используете # $?).

Поиск всего кода, который использует noConflict () везде на рассматриваемой странице, и его JavaScript включает. Вы должны найти его только в одном месте. Сравните разницу со страницами demo.civicrm.org, чтобы увидеть разницу, и вы, вероятно, найдете где-то еще одну. Лучшая надежда для исправления - настроить порядок загрузки пользовательских модулей в системной таблице Drupal или установить второй вызов noConflict () для условного запуска, если объект cj уже не существует.

1 голос
/ 16 августа 2012

Я заполнил отчет об ошибке .Применение этого патча решило проблему, казалось бы, чисто.Таким образом, библиотека jQuery загружается не один раз, если в этом нет необходимости.

...