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

22 октября 2012 в 22:15

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

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

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

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

Комментарии

"dru_and_I" wrote:

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


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

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

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

22 октября 2012 в 23:32

"adubovskoy" wrote:

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

23 октября 2012 в 1:00

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

4 февраля 2013 в 19:05

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

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

21 сентября 2013 в 15:21