jQuery плагин в Drupal без лишних движений.

Аватар пользователя dru_and_I dru_and_I 22 октября 2012 в 22:15

Привет всем, хотелось бы обсудить с вами одну проблему...

Насколько мне известно Drupal не поддерживает jQuery плагины из коробки, потому что фунция $ уже используется для чего-то еще, поэтому приходиться все подобные функции переименовывать в jQuery. Есть ли способ обойти эту продседуру.

Вообще на эту тему меня натолкнул редактор imperavi, понятия не имею почему он отказывается работать, после переименования функций, интегрировать его в wysiwyg не никакого желания. Может у кого-нибудь есть уже готовое решение?

Заранее спасибо.

Комментарии

Аватар пользователя adubovskoy adubovskoy 22 октября 2012 в 23:32

"dru_and_I" wrote:

Насколько мне известно Drupal не поддерживает jQuery плагины из коробки, потому что фунция $ уже используется для чего-то еще


У вас ошибка на уровне допущений и знания основ. Сожалею, нет возможности дать подробный ответ. Возможно, ссылки на http://drupal.org/node/171213 http://drupal.org/node/756722 вам помогут. Там все описано, и про правильное изолирование

(function ($) {
  // Original JavaScript code.
})(jQuery);

и про использование...

Аватар пользователя dru_and_I dru_and_I 23 октября 2012 в 1:00

"adubovskoy" wrote:

Какой вопрос, такой и ответ)
Знаний и правда не много, спасибо за наставление, прочитал, буду пользоваться.

Аватар пользователя Happensit Happensit 4 февраля 2013 в 19:05

Всё достаточно просто! Пишем обработчик чтобы wysiwyg понимал с чем имеет дело. Создаём файл redactor.inc приблизительно такого содержания -

<?php 
function wysiwyg_redactor_editor() {
  
$editor['redactor'] = array(
    
'title' => 'Redactor',
    
'vendor url' => 'http://redactorjs.com/',
    
'download url' => 'http://redactorjs.com/download/',
    
'library path' => wysiwyg_get_path('redactor'),
    
'libraries' => array(
      
'' => array(
        
'title' => 'Minified',
        
'files' => array('redactor.js'),
      ),
      
'src' => array(
        
'title' => 'Normal',
        
'files' => array('redactor.js'),
      ),
    ),
    
'version callback' => 'wysiwyg_redactor_version',
    
'settings callback' => 'wysiwyg_redactor_settings',
    
'versions' => array(
      
'7.6' => array(
        
'js files' => array('redactor.js'),
        
'css files' => array('redactor.css'),
        
'download url' => 'http://redactorjs.com/download/',
      ),
    ),
  );
  return 
$editor;
}

/**
 * Detect editor version.
 */
function wysiwyg_redactor_version($editor) {
  
$script $editor['library path'] . '/redactor.js';
  
$lines file($script);

  

$line $lines[1];
  
$line explode('v'$line);
  
  return 
$line[1];
}

/**
 * Return runtime editor settings for a given wysiwyg profile.
 */
function wysiwyg_redactor_settings($editor$config$theme) {
  
$settings = array();
  
  
$settings['path'] = base_path() . $editor['library path'];
  
  if (isset(
$config['apply_source_formatting'])) {
    
$settings['autoformat'] = TRUE;
  }

  if (isset(

$config['language'])) {
    
$settings['lang'] = $config['language'];
  }

  if (isset(

$config['paste_auto_cleanup_on_paste'])) {
    
$settings['cleanUp'] = TRUE;
  }
  
  if (
$config['resizing'] == 1) {
      
$settings['resize'] = TRUE;
  } else {
      
$settings['resize'] = FALSE;
  }

  if (isset(

$config['css_setting'])) {
    if (
$config['css_setting'] == 'theme') {
        
//Redactor does not support multiple CSS files, so we are going to take the first one of the list we get from WYIWYG (for now, hopefully this gets fixed in Redactor itself
        
$css wysiwyg_get_css();
      
$settings['css'] = $css[0];
    }
    else if (
$config['css_setting'] == 'self' && isset($config['css_path'])) {
      
$settings['css'] = strtr($config['css_path'], array('%b' => base_path(), '%t' => path_to_theme()));
      if (
substr($settings['css'], 01) != '/') {
          
$settings['css'] = '/' $settings['css'];
      }
    }
  }
 
  return 
$settings;
}
?>

И кладём его в wysiwyg/editors/
Создаём в папке editors/js/ файл redactor.js c таким содержанием

(function($) {
Drupal.wysiwyg.editor.attach.redactor = function(context, params, settings) {
var editor = params.field
if (editor != 'undefined' || typeof editor != 'undefined'){
$('#' + editor).redactor(settings);
}
}

Drupal.wysiwyg.editor.detach.redactor = function(context, params) {
var editor = params.field
if (editor != 'undefined' || typeof editor != 'undefined'){
$('#' + editor).destroyEditor();
}
}

})(jQuery);

В папку wysiwyg/editors/css кидаем css из скаченного архива с Imperavi
редактор. "redactor.js" и "redactor.js.min" кладём в libraries/editor/. Очищаем cache и идём в профили Wysiwyg, выбираем для какого формата текста нужно использовать редактор. На этом всё.
С пакетной "drag and drop" загрузкой файлов к сожалению не всё так прозрачно... Если кто решит задачу, надеюсь поделится с сообществом.

Аватар пользователя EugeneP EugeneP 21 сентября 2013 в 15:21

chilic wrote:
Есть под 7-ку и под 6-ку Smile никаких проблем с интеграцией не выявлено.

под 6-ку и 7-ку есть плугин для Redactor? Можно ссылку? А то подключить к wysiwig подключил, но русский язык не смог подключить и загрузку изображений на сервер и как JQuery на странице включить чтоб окна перетаскивать можно было как в примере http://imperavi.com/redactor/examples/draggable-modals/