Benim temamda yerleşik jQuery UI kullanma


25

Temamın her sayfasında jquery UI kullanmanız gerekecek. Drupal 7'ye dahil olduğunu biliyorum, ancak Drupal'ın teknik açıdan çok yönlü belgelerini deşifre edemiyorum. Bunu yapmanın tek yolu template.php dosyasında olduğu gibi görünüyor. Ama bu dosyayı anlamadığım için, bu şekilde yapmaktan kaçınmaya çalışıyorum.

Başka bir yol var mı, yoksa template.php dosyasını mı deneyeyim?


Ne yapmaya çalışıyorsun? Tüm jquery UI işlevleri ve sizin için neyin uygun olmaması gerektiği. Her sayfada özel JS kodu çalıştırılsın mı? Belirli bir sayfada yürütmek? belirli bir olay? JS'yi çalıştırmanın birçok yolu vardır, yani drupal_add_js
LSU_JBob

Temamda her sayfada görünen bazı alanlarda .datepicker () kullanmaya çalışıyorum. Belki daha sonra biraz daha fazla.
Ben

@Ben Bir problemi çözdüyse ödül almayı unutma.
googletorp

@googletorp Üzgünüm, ilk ödülüm. Ödül kazandı.
Ben

Yanıtların birçoğunun son adımı atladığını, drupal_add_library ('system', 'ui.button') ya da her neyse, temanıza gerçekten yattığını söyleyen bir ya da iki satır eklemeniz gerektiğini hissediyorum. Eklenti.
Ryan Price

Yanıtlar:


36

Bir sayfaya JS eklemek gerçekten zor değil, php kullanmanız gerekse bile.

Normal JS dosyaları için böyle bir şey yapabilirsiniz

drupal_add_js($path_to_js)

Ancak Drupal, jQuery UI'yi kütüphanelere kaydetti ve bazı jQuery UI eklentileri için hem JS hem de CSS dosyalarını eklemeyi kolaylaştırdı. Bu kullanılarak yapılabilir

drupal_add_library($module, $library);

Tüm jQuery UI eklentileri sistem modülünde bulunur, böylece

drupal_add_library('system', 'ui');

veya

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

Bu eklentilerin bazılarının bağımlılıkları vardır, çünkü diğer eklentileri kullanırlar. Drupal bunu çok akıllıca ele alır ve gereken bileşenleri içerir.

JQuery eklentilerinin tam listesini burada görebilirsiniz . Bu bir PHP dizisi olarak biçimlendirilmiştir, ancak genellikle adlandırma kuralı ui.PLUGIN-NAME'dir.

JS'yi her sayfaya eklemeniz gerekirse, önceden işlenmiş bir sayfa kancası ekleyebilir ve buraya ekleyebilirsiniz. Bu template.php dosyasında böyle bir şey olurdu.

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

Burada tam olarak ne varsa eklemeyi denedim (ancak tema adımı NAME_OF_THEME yerine kullanırım) template.php'ye çalıştı ve çalışmadı. Herhangi bir fikir? Elimde bu var: function nocturnal_preprocess_page(&$variables) { drupal_add_library('system', 'ui'); drupal_add_library('system', 'ui.datepicker'); }
Ben

Her yeni bir kanca veya ön işleme fonksiyonu eklediğinizde önbelleği temizlemeniz gerekir. Önbelleği temizlemeyi deneyin. Ayrıca çalışıp çalışmadığını test etmek için bir yol gerekir, çünkü yalnızca kendi başlarına hiçbir şey yapmayacak olan JS dosyaları ekliyorsunuzdur.
googletorp

Önbelleği temizledim ve önceden el ile başvurulan bir jquery kullanıcı arabirimi kullanan bazı tarih alanları üzerinde çalışıyor olmalı. Hala hata ayıklama, ancak şimdiye kadar yanlış bir şey bulamıyorum.
Ben

@Ben İlk adım kaynağa bakmak ve dosyaların dahil
edilip edilmediğine bakmaktır (

3
@googletorp: Eğer fark betweeen konuda ayrıntıya misiniz drupal_add_library('system', 'ui');ve drupal_add_library('system', 'ui.accordion');? İlki her şeyi mi alıyor yoksa sadece çekirdeği mi? Kullandığım her eklenti için bir satıra ihtiyacım var mı?
Jarl

4

date_popup modülünü denediniz mi? API formuyla iyi çalışır


Modül istemiyorum çünkü ihtiyaç duyan form çok karmaşık ve özel kodlama gerektiriyor. Temanın şablonuna kodlanması zor. Drupal ile birlikte gelen jquery UI'yi kullanmanın en iyi yolunu bulmaya çalışıyorum. Çalışabilmemin tek yolu onu kendi klasörümün klasörüne koymak ve buraya bağlamak. Ancak bir Drupal kurulumunda birden fazla site çalıştırdığım ve tüm bu sitelerin jQuery UI'ye ihtiyacı olacağı için, yinelenen çalışmaları önlemek için yerleşik jQuery UI'sini kullanmak istedim.
Ben

Herhangi bir siteden herhangi bir jquery ui maddesini çağırabilmeli ve ekleyebilmelisiniz, drupal çekirdeğinde. Form Form API'sı ile oluşturulmuş mu?
LSU_JBob

2
Form neden şablon dosyalarına yerleştirilmiştir? bu çok drupaly değil ... form API'sini kullanmıyorsanız, SQL enjeksiyon saldırılarındaki yerleşik güvenlik gibi bazı avantajlardan mahrum kalırsınız. Formlarınızı şablon dosyalarından almanızı ve Form API'sini kullanarak formları hazırladığınız özel bir modül yazmanızı şiddetle öneririm. Kovboy olmamaya çalış. Her durumda, drupal_add_js, drupal_add_js ('/ misc / ui / jquery.ui.core.min.js', 'dosya') gibi drupal_add_js kullanarak herhangi bir yerden referans alabilirsiniz. AND drupal_add_js ('/ misc / ui / jquery.ui.datepicker.js', 'dosya');
LSU_JBob

3
Form API'sini kullanarak özel bir modülde formu oluşturun, ardından tpl dosyalarında render render (drupal_get_form ('form_id')); Api'ye söz veriyorum, belki de bazı özel javascriptlerde, sahip olduğunuz tüm karmaşık gereksinimleri karşılayabilir. Tüm bu işlevselliği bir tpl dosyasına sıkıştırmaya çalışarak yalnızca kendiniz için işleri zorlaştırdığınızı hissediyorum. Bu teknik olarak tema katmanıdır, bu nedenle büyük işlevsiz arka kod kodlarını bunlara eklemek en iyi yöntem değildir.
LSU_JBob

3
Bence bir modül OLUŞTURMA diyor . İşlevsel şeyler, formlar gibi, modüllere aittir. Form API, kendi özel modülünüzde hayal edebileceğiniz her türlü formu oluşturmanıza olanak sağlar. Tema, çoğu durumda işlevsellikten bağımsız olmalıdır. Bu size yol boyunca daha fazla esneklik sağlayacaktır.
Jonathan Rowny

4
  1. .Tpl dosyasındaki kodlanmış formunuzu bir Form API uygulamasına yeniden yönlendirin. @LSU_JBob'un dediği gibi, FAPI kullanmadan form oluşturmanız için hiçbir neden yok. Form API Hızlı Başlangıç ​​Kılavuzunu okumanızı ve Form API referans sayfasını işaretlemenizi öneririm .
  2. Formunuzu oluşturduktan ve değerlerini girdikten, işledikten vb . Sonra , Date katkı modülündeki kodu indirip okuyabilirsiniz . Tarih oluşturmak istediğiniz tarih açılır penceresini sağlamak için kullanılır, ancak D6'daki CCK ve D7'deki Temel Alanlar için kullanılır. Alanlarla çalışmak istemeseniz de, Date modülü, yapmaya çalıştığınız şeyi başarmak için JQuery UI kullanır. Bu modül size sağlam bir örnek vermeli.

Teşekkürler. Bu bağlantılar yardımcı olur. PHP'ye girmeyi gerçekten sevmiyorum, ama sanırım tam olarak ne yapmak istersem onu ​​yapmalıyım. Şu an için Drupal PHP'yi öğrenmek için zamanım olmadığından, muhtemelen sadece hatırlatmak için tpl dosyasında tutacağım. Yine de herkesten iyi tavsiye.
Ben

3

Buna googletorpcevap verdiğin için teşekkürler .

Sadece eklemek, UI eklentileri etkinleştirme ile ilgili şeyler hala çok net değilse .

Lütfen bahsedeceğiniz zaman: drupal_add_library('system', 'ui');
Bu, tüm kullanıcı arayüzü eklentilerini otomatik olarak etkinleştirmeyecektir.

Mevcut jquery ui eklentileri listesini drupal 7'de bulabilirsiniz: /misc/ui/

Pertiküler bir eklentiyi etkinleştirmek için, örneğin: jquery.ui.slider.min.jsbu satırı eklemelisiniz:

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

Umarım bu yararlıdır.


2

Son zamanlarda bu sorunu yaşadım. Birisi bana JQuery UI'yi her sayfaya yüklemesi için özel modülünü verdi. Basitçe yeniden yaratabilirsiniz. İlk önce, jquery_update programını yükleyin ve çalıştığından emin olun. Ardından, bu modülü oluşturun ve etkinleştirin:

'Jquery_force' adında / to / modüllerde bir klasör oluşturun.

İçine iki dosya ekleyin:

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

template.phpDosyaya bir ön işleme kancası eklemek benim için işe yaramadı.

Ben basitçe drupal_add_library('system', 'ui');içine template.phpkendisi tarafından dosyaya çalışır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.