Como você carrega arquivos javascript extras necessários para o plug-in wysiwyg api nas páginas de nó / edição?


9

Estou construindo um plug-in usando o módulo API WYSIWYG do Drupal 7 que adicionará um botão à barra de ferramentas dos editores suportados.

Estou usando o hook_wysiwyg_plugin()gancho para criar um novo botão na barra de ferramentas do editor, mas preciso carregar alguns outros arquivos javascript. O hook_wysiwyg_plugin()gancho parece permitir que você especifique um arquivo JS e CSS.

Como posso carregar arquivos javascript extra necessários para o plugin javascript?

Eu implementei hook_library()para definir uma biblioteca, ou seja, arquivos js / css, mas não tenho certeza de como vinculo isso à wysiwyg api para que eles carreguem nas telas de nó / edição?


Voz seu pedido aqui também drupal.org/node/1039076
giorgio79

Respostas:


1

Na verdade, é bastante simples, embora minha experiência em fazer a mesma coisa seja no Drupal 6, portanto, pode haver algumas pequenas diferenças no meu código:

function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  // Only modify node_form's.
  // @TODO - Set a condition for all forms you wish to alter for D7 entities.
  if (isset($form['type']['#value']) && $form_id == "{$form['type']['#value']}_node_form") {
    // We use after build to add JS and CSS to prevent issues caused by form caching.
    $form['#after_build'][] = 'MYMODULE_form_alter_after_build';
  }
}

function MYMODULE_form_alter_after_build($form_element, &$form_state) {
  drupal_add_js(...);
}

Novamente, esse código é para D6, mas o princípio básico ainda deve funcionar.

Embora não esteja vinculada diretamente à API Wysiwyg, é provavelmente a melhor opção, pois a API Wysiwyg suporta apenas arquivos JS por plug-in (iirc).

Algumas opções selvagens / não testadas para você:

  • Faça um retorno de menu para o arquivo Javascript definido no plug-in e devolva um arquivo javascript em cache que contém as fontes de vários arquivos javascript. (O Wysiwyg Fields faz o retorno de chamada do menu para plugins gerados dinamicamente, mas apenas para um arquivo javascript, consulte a fonte para obter idéias).

  • Use uma técnica de carregamento Javascript dinâmico Javascript semelhante a http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml

Espero que isto ajude.


Ainda não tentei, mas parece que isso funcionará. Obrigado.
Camsoft 5/03/11

2

Com drupal_add_js :

function yourmodule_preprocess_page(&$vars)
{
  $node = $vars['node']; 
  if($node->type == 'yournodetype' AND arg(2) == 'edit')
  {
    drupal_add_js([...]);
  }
}

Eu realmente preciso que ele esteja vinculado ao módulo API WYSIWYG, para que os arquivos adicionais sejam carregados apenas quando esse módulo criar uma área WYSIWG. Também preciso carregar uma biblioteca definida por hook_library ().
Camsoft

1

Em teoria, tudo que você precisa fazer é usar o parâmetro " #text_format " correto no #type textareaelemento FAPI para que o editor wysiwyg associado ao Formato de texto seja incluído automaticamente, desta maneira:

function mymodule_menu(){
    return array(
        'mypage' => array(
            'title' => 'A page to test wysiwyg',
            'page callback' => 'drupal_get_form',
            'page arguments' => array('mymodule_page'),
            'access arguments' => array('access content'), 
        )
    );
}

function mymodule_page($form, &$form_state) {
    $element = array(
        '#type' => 'textarea', 
        '#title' => t('Comment'), 
        '#default_value' => 'something',
        '#text_format' => 'full_html',
        '#required' => TRUE,
    );
    $form['mytext'] = $element;
    return $form;
}

No entanto, ele não é incluído, a menos que seja uma página de "edição de nó"; portanto, algo relacionado às funções " filter_process_format" ou " wysiwyg_pre_render_text_format" pode forçá-lo, mas ainda não encontrei a combinação mágica, ainda lendo a fonte de o módulo Wysiwyg para encontrar a peça que falta.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.