web-dev-qa-db-ja.com

テーマで組み込みのjQuery UIを使用する

私のテーマのすべてのページでjquery UIを使用する必要があります。 Drupal 7に含まれていることは知っていますが、Drupalの技術的すぎるドキュメントを解読することはできません。これを行う唯一の方法は、template.phpファイルを使用するようです。しかし、私はそのファイルを理解していないので、そのようにしないようにしています。

別の方法はありますか、それともtemplate.phpファイルを試してみるべきですか?

24
Ben

PHPを使用する必要がある場合でも、ページにJSを追加することはそれほど難しくありません。

通常のJSファイルの場合、次のようなことができます

drupal_add_js($path_to_js)

ただし、DrupalはライブラリにjQuery UIを登録しているため、特定のjQuery UIプラグインのJSファイルとCSSファイルの両方を簡単に追加できます。これは、

drupal_add_library($module, $library);

すべてのjQuery UIプラグインはシステムモジュールに存在するので、

drupal_add_library('system', 'ui');

または

drupal_add_library('system', 'ui.accordion');

これらのプラグインの一部は他のプラグインを使用するため、依存関係があります。 Drupalはこれを非常に巧妙に処理し、必要なコンポーネントを含めます。

JQueryプラグインの完全なリスト ここ を確認できます。これはPHP=配列としてフォーマットされますが、一般的に命名規則はui.PLUGIN-NAMEです。

すべてのページにJSを追加する必要がある場合は、プリプロセスページフックを追加してそこに追加するだけです。これは、template.phpファイルでは次のようになります。

function NAME_OF_THEME_preprocess_page(&$variables) {
  drupal_add_library('system', 'ui');
  drupal_add_library('system', 'ui.accordion');
  drupal_add_library('system', 'effects.highlight');
}
36
googletorp

date_popup モジュールを試しましたか?フォームAPIでうまく機能します

4
LSU_JBob
  1. .tplファイルのハードコードされたフォームをForm API実装にリファクタリングします。 @LSU_JBobが言ったように、FAPIを使用せずにフォームを作成する必要がある理由はありません。 フォームAPIクイックスタートガイド を読み、 フォームAPIリファレンス ページをブックマークすることをお勧めします。
  2. フォームを作成し、値を送信したり、フォームを処理したりできるようになったら、ダウンロードして Date contribモジュールのコードを読みます。日付は、作成したい種類の日付ポップアップを提供するために使用されますが、D6のCCKおよびD7のコアフィールド用です。フィールドを操作するつもりはありませんが、DateモジュールはJQuery UIを使用して、実行しようとしていることを実行します。このモジュールは確かな例を提供するはずです。
4
amateur barista

これに答えてくれてありがとうgoogletorp

追加するだけです-有効にすることに関連してまだ明確でない場合はIプラグインです。

言及するときは、drupal_add_library('system', 'ui');に注意してください
すべてのUIプラグインが自動的に有効になるわけではありません。

利用可能なjquery uiプラグインのリストは、drupal 7ここにあります:/misc/ui/

特定のプラグインを有効にするには、例えば:jquery.ui.slider.min.js、次の行を追加する必要があります:

drupal_add_library('system', 'ui.slider');

これがお役に立てば幸いです。

3
Sumoanand

最近この問題が発生しました。誰かが私にカスタムモジュールを与えて、JQuery UIをすべてのページにロードさせました。簡単に再作成できます。まず、 jquery_update をインストールして、機能していることを確認します。次に、このモジュールを作成して有効にします。

Path/to/modulesに「jquery_force」という名前のフォルダーを作成します。

内部に2つのファイルを追加します。

jquery_force.info

name = JQuery UI Force
description = Forces JQuery UI to always load
dependencies[] = jquery_update
package = User Interface
core = 7.x
files[] = jquery_force.module

jquery_force.module

<?php
/**
 * @file jquery_force.module
 * TODO: Enter file description here.
 */

/**
 * Implements hook_init().
 */
function jquery_force_init() {
    drupal_add_library('system', 'ui');
}
2
mtro

_template.php_ファイルにプリプロセスフックを追加してもうまくいきませんでした。

私は単にdrupal_add_library('system', 'ui');を_template.php_ファイルに入れるだけで機能します。

2
user17418