Как Drupal работает? [закрытый]

Я не знаю, правильно это или нет, но я поместил «старое имя» ветви в «новое имя» ветви, а затем полностью удалил старую ветку следующими двумя строками:

git push origin old_branch:new_branch
git push origin :old_branch
151
задан domoaringatoo 21 November 2015 в 00:33
поделиться

7 ответов

http://drupal.org/handbooks

Прочтите справочники, особенно руководство разработчика темы. Drupal поддерживает несколько движков тем. Zen использует phptemplate, поэтому обратите внимание на эту часть руководства.

API для разработки модулей задокументирован на api.drupal.org.

особенно когда вам нужно быстро и быстро получить информацию http://www-128.ibm.com/developerworks/ibm/osource/implement.html

9
ответ дан 23 November 2019 в 22:15
поделиться

Я изучил нагрузки, импортировав код drupal .php в проект NetBeans. Затем вы можете запустить отладчик netbeans и наблюдать, как разные фазы страницы объединяются.

5
ответ дан 23 November 2019 в 22:15
поделиться

Ответ Eaton дает хороший обзор. (Я здесь новичок, поэтому не могу модифицировать его, поэтому комментарий.)

Жестокий момент для меня - это осознание того, что все происходит через index.php, а затем через водопад модулей (сначала ядро , затем по сайту). Чтобы расширить основные функции, не переписывайте его. Вместо этого скопируйте модуль в / sites / all / modules / или / sites / [yoursite] / modules и расширьте THAT, либо создайте новый модуль в этих местах. То же самое и с темами. Каталоги модулей также могут содержать отображаемый код в форме tpl, css и т. Д.

Если вы привыкли к более строгим фреймворкам типа MVC, таким как Rails, Django и т. Д., Все это немного запутывает. Модули могут смешиваться с большим количеством отображаемого кода, и если вы смотрите на чужие модули или шаблоны, вы В конечном итоге я перевернусь назад через стек. В этом прелесть / боль работы с PHP.

По иронии судьбы, «просто создайте приложение» может быть худшим способом научиться этому. Drupal делает так много из коробки, что просто непонятно, пока вы не разберетесь с потоком управления. В файле tpl нет ничего, что сообщало бы вам, например, откуда взялась функция с забавным именем вроде l ().

20
ответ дан 23 November 2019 в 22:15
поделиться

Drupal может быть это сбивает с толку, частично потому, что он имеет относительно глубокий стек функций. Хотя это процедурный PHP, его архитектура полностью управляется событиями / слушателями, и в основном PHP-скрипте нет простого «потока», на который вы могли бы смотреть. Недавно я сделал презентацию на эту тему , и слайды размещены на Slideshare, но может быть полезно краткое обобщение.

  • Файл index.php Drupal функционирует как внешний контроллер. Все страницы проходят через него, а «фактический» URL / путь, запрошенный пользователем, передается в index.php в качестве параметра.
  • Система маршрутизации путей Drupal (MenuAPI) используется для сопоставления запрошенного пути с заданным модулем плагина . Этот подключаемый модуль отвечает за создание «основного содержимого» страницы.
  • После создания основного содержимого страницы index.php вызывает тему ('page', $ content), которая передает содержимое тематике / система снятия шкур. Там он заключен в боковые панели / заголовки / виджеты / и т. Д.
  • Обработанная страница затем возвращается в apache и отправляется обратно в браузер пользователя.

В течение всего этого процесса, Модули плагинов Drupal и сторонних разработчиков запускают события и ждут, чтобы они ответили. В Drupal это называется системой «ловушек», и она реализована с использованием соглашений об именах функций. Например, модуль «блог» может перехватывать «пользователя», реализовав функцию с именем blog_user (). На языке Drupal это называется hook_user () .

Это немного неуклюже, но из-за особенности PHP (он хранит внутреннюю хеш-таблицу всех загруженных функций) позволяет Drupal быстро проверять наличие слушателей просто перебирая список установленных плагинов. Для каждого плагина он может вызывать function_exists () для соответствующего названного шаблона и вызывать функцию, если она существует. («Я запускаю событие 'login'. Существует ли функция 'mymodule_login'? Я вызову ее. Есть ли ' yourmodule_login 'существует? Нет? Как насчет 'nextmodule_login'? "И т. Д.) Опять же, прикосновение неуклюже, но работает довольно хорошо.

Все , что происходит в Drupal, происходит из-за срабатывания одного из этих событий. MenuAPI знает только о том, какие URL / пути обрабатываются разными модулями подключаемых модулей, потому что он запускает событие 'menu' (hook_menu) и собирает все модули подключаемых модулей метаданных, которые отвечают. («Я позабочусь об URL-адресе 'news / latest', и вот функция для вызовите, когда эта страница должна быть построена ... ") Содержимое сохраняется только потому, что FormAPI Drupal отвечает за создание страницы и запускает событие 'форма была отправлена', на которое модуль должен ответить. Ежечасное обслуживание происходит, потому что hook_cron ( ) срабатывает, и любой модуль с mymodulename_cron () в качестве имени функции будет иметь свою функцию.

Все остальное, в конечном счете, является просто деталями - важными деталями, но вариациями на эту тему. index.php - это контроллер, система меню определяет, что такое «текущая страница», и в процессе создания этой страницы запускается множество событий. Модули подключаемых модулей могут подключаться к этим событиям и изменять рабочий процесс / предоставлять дополнительную информацию / и т. Д. Это также одна из причин, по которой так много ресурсов Drupal сосредоточено на создании модулей. Без модулей Drupal на самом деле ничего не делает, кроме как сказать: «Кто-то попросил страницу! Он существует? Нет? Хорошо, я подам 404. »

система меню определяет, что такое «текущая страница», и в процессе создания этой страницы запускается множество событий. Модули подключаемых модулей могут подключаться к этим событиям и изменять рабочий процесс / предоставлять дополнительную информацию / и т. Д. Это также одна из причин, по которой так много ресурсов Drupal сосредоточено на создании модулей. Без модулей Drupal на самом деле ничего не делает, кроме как сказать: «Кто-то попросил страницу! Он существует? Нет? Хорошо, я подам 404. »

система меню определяет, что такое «текущая страница», и в процессе создания этой страницы запускается множество событий. Модули подключаемых модулей могут подключаться к этим событиям и изменять рабочий процесс / предоставлять дополнительную информацию / и т. Д. Это также одна из причин, по которой так много ресурсов Drupal сосредоточено на создании модулей. Без модулей Drupal на самом деле ничего не делает, кроме как сказать: «Кто-то попросил страницу! Он существует? Нет? Хорошо, я подам 404. »

На самом деле ДЕЛАТЬ ничего, кроме как сказать: «Кто-то попросил страницу! Он существует? Нет? Хорошо, я подам 404. »

На самом деле ДЕЛАТЬ ничего, кроме как сказать: «Кто-то попросил страницу! Он существует? Нет? Хорошо, я подам 404. »

159
ответ дан 23 November 2019 в 22:15
поделиться

В зависимости от используемого движка базы данных могут быть ограничения на длину инструкции.

SQL Server имеет очень большое ограничение:

http: // msdn. microsoft.com/en-us/library/ms143432.aspx

ORACLE имеет очень легко достижимый предел с другой стороны.

Итак, для больших предложений IN лучше создать временную таблицу, вставить значения и присоединяйтесь. Он также работает быстрее.

Если вам нужны более подробные сведения, я бы начал писать что-нибудь большинство документации хороши. Пытаться изучить это на высоком уровне детализации без чего-то конкретного будет намного труднее, чем попробовать что-то.

5
ответ дан 23 November 2019 в 22:15
поделиться

Лучшими книгами по этой теме являются «Профессиональная разработка Drupal» и «Использование Drupal».

«Профессиональная разработка Drupal» включает в себя несколько хороших блок-схем и подробное описание каждого API Drupal (формы , тематика и т. д.). Он предназначен для того, чтобы быть особенно поучительным для людей, создающих собственные модули и темы, но имеет большую ценность для среднего опытного PHP-разработчика, который хочет понять Drupal. Кроме того, я создал настраиваемый модуль для каждого сайта, который я создал, просто чтобы получить дополнительный контроль над такими вещами, как выборочное скрытие полей в различных формах (что вы обычно хотите сделать ради упрощения форм узлов для конечных целей). пользователей), так что хорошо иметь эти знания под своей шляпой.

"Использование Drupal" предназначена для разработчиков сайтов, которые хотят знать, как создавать хорошие вещи, такие как галереи, блоги и сайты социальных сетей. В нем рассматриваются несколько сценариев использования и показано, как настроить существующие модули для выполнения каждой работы. В процессе он знакомит вас с основными дополнительными модулями «Content Construction Kit» (CCK) и «Views», как создавать собственные блоки и шаблоны, а также с тонкостями поддержки сайта Drupal. Я рекомендую эту книгу особенно тем, кто хочет быстро освоиться и сразу же ИСПОЛЬЗОВАТЬ Drupal. В процессе вы получите представление о внутренней организации Drupal.

В процессе он знакомит вас с основными дополнительными модулями «Content Construction Kit» (CCK) и «Views», как создавать собственные блоки и шаблоны, а также с тонкостями поддержки сайта Drupal. Я рекомендую эту книгу особенно тем, кто хочет быстро освоиться и сразу же ИСПОЛЬЗОВАТЬ Drupal. В процессе вы получите представление о внутренней организации Drupal.

В процессе он знакомит вас с основными дополнительными модулями «Content Construction Kit» (CCK) и «Views», как создавать собственные блоки и шаблоны, а также с тонкостями поддержки сайта Drupal. Я рекомендую эту книгу особенно тем, кто хочет быстро освоиться и сразу же ИСПОЛЬЗОВАТЬ Drupal. В процессе вы получите представление о внутренней организации Drupal.

5
ответ дан 23 November 2019 в 22:15
поделиться

Это зависит от того, насколько глубокое понимание вы ищете; Если вы хорошо знакомы с php, я бы посоветовал прочитать сам код, начиная с index.php, а затем перейти к include / bootstrap.inc, а затем к некоторым другим скриптам в этом каталоге.

Ключевые включаемые файлы:

  • menu.inc очень важен для понимания того, как работает система в целом, поскольку он обрабатывает большую часть неявного сопоставления URL-адресов с контентом.
  • common.inc содержит большинство загадочных функций, которые составляют основу API.
  • module.inc обрабатывает вызовы ловушек, о которых упоминал Eaton
  • form.inc имеет дело с отображением, отправкой и обработкой форм
  • theme.inc обрабатывает представление.

В каталоге modules / также есть некоторые ключевые функции; в частности, modules / node / node.module формирует основу системы узлов, которая обычно используется для инкапсуляции содержимого сайта.

Код, в целом, очень хорошо прокомментирован и ясен. Использование разметки Doxygen в комментариях означает, что код фактически является канонической документацией.

Это также помогает сделать это с помощью редактора, который может быстро перейти к определению функции. У меня работает использование vim в сочетании с ctags; вам нужно указать ctags для индексации файлов .inc, .module и т. д. как файлов php.

7
ответ дан 23 November 2019 в 22:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: