Nasıl Drupal çalışır?

9 Cevap php

Ben Drupal gerçekten nasıl çalıştığı hakkında kapsamlı bir bakış görmek için henüz. Öğreticiler çoğu modülü eklenerek veya bir site yapılandırma gibi, topal şeyleri vardır. Nerede sayfa nasıl oluşturulan alır ilgili bir akış şeması nedir? Belgelerin en çok hantal. Drupal gerçekten nasıl çalıştığını öğrenmek için en iyi kaynak nedir?

9 Cevap

Nispeten derin bir işlev yığını kısmen çünkü Drupal, bu ön kafa karıştırıcı olabilir. Prosedürel PHP olmasına rağmen bunun tamamen kendi mimarisi içinde tahrik olay / dinleyici, ve olsa bakmak için basit bir "akış" ana PHP komut dosyası var. Geçenlerde a presentation on this very subject yaptım ve slaytlar Slideshare gönderdi, ancak hızlı bir üst düzey özet yararlı olabilir.

  • Ön taraf denetleyicisi olarak Drupal index.php dosya fonksiyonları. Bütün sayfa içinden borulu edilir ve "gerçek" URL / veya yol, kullanıcı, bir parametre olarak index.php geçirilir.
  • Drupal yolu yönlendirici sistem (MenuAPI) verilen bir eklenti modülüne istenen yolunu eşleştirmek için kullanılır. Bu eklenti modülü sayfanın "birincil içeriği" inşa sorumludur.
  • Birincil sayfa içeriği oluşturulduktan sonra, index.php temayı Drupal tema / sistemini arayüz için içeriği ellerini ('sayfa', $ içerik), çağırır. Orada, o sidebars / başlıklar / widgets / etc sarılı ..
  • Render sayfa sonra tekrar apache teslim edilir ve geri kullanıcının tarayıcısına gönderilen alır.

Bu tüm süreç boyunca, Drupal ve üçüncü parti eklenti modülleri olayları kapalı ateş ve onlara cevap vermek için dinliyor. Drupal 'çengel' sistemi bu çağrıları ve bu fonksiyon isimlendirme kuralları kullanarak uygulanacağı. 'Blog' modülü, örneğin, bir fonksiyon adında blog_user (uygulayarak ilgili 'kullanıcı') müdahale edebilirsiniz. Drupal dilinde, bu denir hook_user().

Bu biraz aksak, ama nedeniyle PHP cilvesi (tüm yüklenen fonksiyonların bir iç hashtable tutar) için, Drupal hızlı bir şekilde sadece yüklü eklentileri bir liste üzerinde yineleme tarafından dinleyicileri için kontrol etmenizi sağlar. Her eklenti için uygun adlı desen () function_exists diyoruz ve eğer varsa işlevini çağırabilirsiniz. Bir dokunmatik aksak, Yine (vb "Ben Hayır Nasıl? 'Nextmodule_login' hakkında? Var mı 'yourmodule_login'. Onu arayacağım? Yapar 'mymodule_login' işlevi var. 'Login' olayı kovuyorum"), ancak oldukça iyi çalışıyor.

Everything Drupal olur ateş ediliyor bu olayların biri nedeniyle olur. Bu 'menü' olayı (hook_menu) patlar ve modülleri ile cevap tüm metadata eklenti toplar çünkü MenuAPI sadece adresler / yollar farklı eklenti modülleri tarafından işlenir ne bilir. ("Ben 'haber / son' url ilgilenirim, ve burada bu sayfa inşa edilmesi gerektiğinde aramak için fonksiyon var ...") İçerik sadece kurtulur Drupal FormAPI bir sayfa oluşturmak için sorumlu olduğundan, ve yangınlar yanıt vermek için bir modül için 'form sunuldu' olayı. Hook_cron () tetiklenir çünkü saatlik bakım olur, ve bir işlev adı olarak mymodulename_cron ile herhangi bir modül () fonksiyonu denir olacaktır.

Önemli ayrıntılar, ama bu tema üzerine varyasyonlar - Her şey sonuçta sadece ayrıntıları edilir. index.php denetleyici olduğu, menü sistemi "geçerli sayfa" ne determins ve etkinlikler çok o sayfayı inşa sürecinde kovulacak. Eklenti modülleri bu olayların içine kanca ve iş akışı / besleme ek bilgi / etc değiştirebilirsiniz. Bu da pek çok Drupal kaynak modülleri yapmaya odaklanmak neden bir parçasıdır. Modülleri olmadan, Drupal aslında söylemek başka bir şey yapmaz, 'Birisi bir sayfa istedi! Bu var mı? Hayır mı? Tamam, ben bir 404 kadar hizmet edeceğiz. '

Drupal Sayfa Mechanism Porsiyon

Drupal nasıl çalıştığını anlamak için, Drupal sayfası hizmet mekanizmasını anlamak gerekir - http://drupal.org/node/10858.

Kısacası, tüm çağrılar / adresler / istekleri çeşitli istek / url hizmet dosyaları / modülleri ve daha sonra uygun işlevini çağırarak, modül içinde tanımlı dahil dahil ederek Drupal yükler index.php tarafından sunulmaktadır.

İşte Drupal önyükleme sürecini açıklar kitap, Pro Drupal Geliştirme, gelen ekstresi,

The Bootstrap Process

Drupal önyükleme aşamaları bir dizi geçerek her istek üzerine kendisini özyüklenirler. Bu aşamalar bootstrap.inc tanımlanan ve aşağıdaki bölümlerde anlatıldığı gibi devam edilir.

Initialize Configuration

This phase populates Drupal’s internal configuration array and establishes the base URL ($base_url) of the site. The settings.php file is parsed via include_once(), and any variable or string overrides established there are applied. See the “Variable Overrides” and “String Overrides” sections of the file sites/all/default/default.settings.php for details.

Early Page Cache

In situations requiring a high level of scalability, a caching system may need to be invoked before a database connection is even attempted. The early page cache phase lets you include (with include()) a PHP file containing a function called page_cache_ fastpath(), which takes over and returns content to the browser. The early page cache is enabled by setting the page_cache_fastpath variable to TRUE, and the file to be included is defined by setting the cache_inc variable to the file’s path. See the chapter on caching for an example.

Initialize Database

During the database phase, the type of database is determined, and an initial connection is made that will be used for database queries.

Hostname/IP-Based Access Control

Drupal allows the banning of hosts on a per-hostname/IP address basis. In the access control phase, a quick check is made to see if the request is coming from a banned host; if so, access is denied.

Initialize Session Handling

Drupal takes advantage of PHP’s built-in session handling but overrides some of the handlers with its own to implement database-backed session handling. Sessions are initialized or reestablished in the session phase. The global $user object representing the current user is also initialized here, though for efficiency not all properties are available (they are added by an explicit call to the user_load() function when needed).

Late Page Cache

In the late page cache phase, Drupal loads enough supporting code to determine whether or not to serve a page from the page cache. This includes merging settings from the database into the array that was created during the initialize configuration phase and loading or parsing module code. If the session indicates that the request was issued by an anonymous user and page caching is enabled, the page is returned from the cache and execution stops.

Language Determination

Dil belirlenmesi aşamasında, Drupal dilli destek başlatıldı ve bir karar dil site ve kullanıcı ayarlarına göre geçerli sayfayı hizmet için kullanılacak hangi olarak yapılır. Drupal gibi yolu öneki ve etki alanı düzeyinde dil müzakere olarak dil desteği belirlemek için çeşitli alternatifler destekler.

Path

At the path phase, code that handles paths and path aliasing is loaded. This phase enables human-readable URLs to be resolved and handles internal Drupal path caching and lookups.

Full

This phase completes the bootstrap process by loading a library of common functions, theme support, and support for callback mapping, file handling, Unicode, PHP image toolkits, form creation and processing, mail handling, automatically sortable tables, and result set paging. Drupal’s custom error handler is set, and all enabled modules are loaded. Finally, Drupal fires the init hook, so that modules have an opportunity to be notified before official processing of the request begins.

Once Drupal has completed bootstrapping, all components of the framework are available. It is time to take the browser’s request and hand it off to the PHP function that will handle it. The mapping between URLs and functions that handle them is accomplished using a callback registry that takes care of both URL mapping and access control. Modules register their callbacks using the menu hook (for more details, see Chapter 4).

When Drupal has determined that there exists a callback to which the URL of the browser request successfully maps and that the user has permission to access that callback, control is handed to the callback function.

Processing a Request

The callback function does whatever work is required to process and accumulate data needed to fulfill the request. For example, if a request for content such as http://example.com/ q=node/3 is received, the URL is mapped to the function node_page_view() in node.module. Further processing will retrieve the data for that node from the database and put it into a data structure. Then, it’s time for theming.

Theming the Data

Theming involves transforming the data that has been retrieved, manipulated, or created into HTML (or XML or other output format). Drupal will use the theme the administrator has selected to give the web page the correct look and feel. The resulting output is then sent to the web browser (or other HTTP client).

Eaton cevabı iyi bir genel bakış sağlar. (Ben bu yüzden, böylece Yorum onu ​​mod olamaz burada yeniyim.)

Benim için acımasız "aha" an her şey modülleri (çekirdek ilk olarak, daha sonra site tarafından) bir şelale ile daha sonra index.php yoluyla olur ve fark oldu. Çekirdek işlevselliğini genişletmek için yeniden yazmak değil. Bunun yerine modülünü / sitelerine / all / modules / veya / siteler / [yoursite] / modules kopyalamak ve OLDUĞUNU genişletmek veya bu yerlerde yeni bir modül oluşturun. Temalar için aynı. Modül dizinleri TPL şeklinde, CSS gibi, hem görüntü kod içerebilir

Eğer Rails gibi katı MVC tip çerçeveler için kullanılan ediyorsanız, Django vb tüm bu biraz kafa karıştırıcı alır. Modüller ekran kodu bir sürü de karıştırıp, ve başkasının modülleri veya şablonları arıyorsanız eğer sonunda yığını geriye doğru yürürken gireriz. Yani PHP çalışan güzelliği / acı.

İronik olarak, "sadece bir uygulama oluşturmak" bu öğrenmek için kötü bir yol olabilir. Eğer kontrol akışını anlamaya kadar Drupal sadece karanlık olduğunu kutudan çok yapar. L gibi eğlenceli bir isim () ile bir işlev, örneğin nereden geldiğini söyleyen bir tpl dosyasında hiçbir şey yok.

http://drupal.org/handbooks

El kitapları, özellikle tema geliştirici kılavuzunu okuyun. Drupal birkaç tema motorları destekler. Zen böylece kılavuzun bu kısmına dikkat phptemplate kullanır.

Modül geliştirme için, API api.drupal.org belgelenmiştir.

specially when you need to get the info fast and fast http://www-128.ibm.com/developerworks/ibm/osource/implement.html

This Drupal oldukça iyi bir mimari bakış niteliğindedir. Eğer daha fazla ayrıntı istiyorsanız o zaman ben bir şey most belgelere iyi yazımı başlamak istiyorum. Ulaşmak için somut bir şey olmadan yüksek ayrıntı seviyesinde bunu öğrenmeye çalışıyorum çok daha zor bir şey denediğini olacaktır.

Konuyla ilgili en iyi kitaplar "Pro Drupal Development" ve "Drupal kullanma."

"Pro Drupal Development" birkaç güzel akış şemaları ve Drupal API (formlar, tema, vb) her kapsamlı özetlerini içermektedir. Bu kendi modülleri ve temaları yapma insanların özellikle öğretici olması amaçlanmıştır, ancak Drupal anlamak istiyor ortalama PHP anlayışlı geliştirici için değeri çok sahip oluyor. Bunlar bir yana, sadece seçici genellikle için düğüm formları basitleştirilmesi uğruna yapmak istediğiniz (çeşitli formlardaki alanları gizleme sonu gibi şeyler üzerinde ekstra kontrol kazanmak için, ben inşa ettik, her site için özel bir modül oluşturdum kullanıcılar), bu şapka altında bu bilgilere sahip olmak iyi yani.

"Drupal kullanma" galerileri, bloglar ve sosyal ağ siteleri gibi iyi şeyler inşa etmek nasıl bilmek istiyor sitesi geliştiricisi hedefleniyor. Bu çeşitli kullanım-vakalarda geçer ve her işi yapmak için mevcut modülleri yapılandırmak için nasıl gösterir. Bu süreç içinde gerekli eklenti modülleri "İçerik İnşaat Kit" (CCK) ve özel blokları ve şablonları nasıl "Ziyaretleri", ve bir Drupal sitesi sürdürmenin ins-ve-çıkışları ile tanıtır. Özellikle hız kadar almak isteyenler için bu kitabı tavsiye ve aslında hemen Drupal KULLANIN. Süreçte Drupal iç organizasyon bir anlayış kazanmak.

Bir test site kurmak. Başka bir şey gibi, ben öğrendim.

Bu aradığınız ne derin bir anlayış bağlıdır; Eğer php iyi bir bilgi varsa, ben, kod kendisi okuyarak index.php ile başlayan ve daha sonra includes / bootstrap.inc için devam önermek ve o dizindeki diğer bazı betikleri olacaktır.

Anahtar dosyaları şunlardır:

  • menu.inc bu içeriği URL'lerin örtük haritalama bir sürü kolları olarak genel sistem, nasıl çalıştığını anlamak için çok önemlidir.
  • common.inc API temelini oluşturan aksi-gizemli fonksiyonların çoğu vardır.
  • module.inc Eaton belirtilen kanca çağırmaları kolları
  • Form ekranı, sunulması ve işleme ile form.inc fırsatlar
  • theme.inc tanıtımı yönetir.

Modules / dizinine bazı önemli işlevleri de var; Özellikle, modules / düğüm / node.module site içeriği kapsamak için kullanılan ne genel olarak düğüm sisteminin temelini oluşturur.

Kod, genel olarak, çok iyi yorumladı ve net. Yorumlama içinde Doxygen biçimlendirme kullanımı, kod etkili kurallı belgeler olduğu anlamına gelir.

Aynı zamanda hızlı bir fonksiyonun tanımına atlayabilirsiniz bir editörü kullanarak bunu yapmak için yardımcı olur. Ctags ile birlikte vim kullanarak benim için çalışıyor; Eğer dizin. inc. modülü, vb php dosyaları gibi dosyaları ctags söylemek zorundayım.

Burada yeni bir katkı, 2 yıl geç konuşma ;-)

http://stackoverflow.com/a/1070325/1154755 yanıtlarken

To extend core functionality don't rewrite it. Instead copy the module into /sites/all/modules/ or /sites/[yoursite]/modules and extend THAT, or create a new module in those places. Same for themes.

Aslında, ben onu güncellemek için bir çekirdek modülü kopyalamak yoktu. Drupal Kancalar ihtiyacınız olmalıdır.

Temalar için, evet, bazen gitmek için tek yoldur, ancak genellikle, size ihtiyacınız sonuç almak için bir subtheme inşa edebilirsiniz.