Як я можу запустити PHP-код без написання модуля?


15

Мені потрібно прикласти поле до деяких пучків. Фрагмент PHP зробить роботу для мене, тому мені не потрібен модуль. Нижче показаний фрагмент:

$field_name = 'field_custom_image';
// Create the field.
$field = array(
  'field_name' => $field_name,
  'type' => 'image',
);
field_create_field($field);

а потім фрагмент, щоб додати це поле до групи:

// Create the instance.
$instance = array(
  'field_name' => $field_name,
  'entity_type' => 'node',
  'bundle' => 'article',
  'label' => 'Image',
  'description' => 'An image for the article.',
  'required' => TRUE,
);
field_create_instance($instance);

Чи є спосіб запустити PHP-код безпосередньо в Drupal, без необхідності написати модуль, встановити його, змусити його запустити та видалити його?


Дякую всім за робочі відповіді та хороші видання на моє запитання. Я проголосував за всі відповіді як рішення своєї проблеми, тепер для мене важке рішення вибрати одну з цих відповідей як найкраще рішення, тому що всі справи працюють.
Аліреза Табатабайський

1
Якби ви показували код, який потрібно запустити, відповіді були б більш повними.
kiamlaluno

@kiamlaluno Дякую за пораду, я додаю фрагмент PHP до мого запитання.
Аліреза Табатабайський

1
Питання та відповіді, пов'язані між собою: Як виконати скрипт php за допомогою drush ?
таніум

Відповіді:


6

Якщо ви в одній думці говорите "Мені потрібно запустити деякий PHP" і "Мені не потрібен модуль", я б запропонував, що ви йдете неправильним шляхом, будь то в підході до цієї конкретної проблеми або підхід до створення сайту в цілому.

drush scrдопоможе вам, якщо це напрямок, який ви дійсно хочете піти, або ви можете написати окремий скрипт PHP (в основному просто скопіюйте / вставте все через drupal_bootstrap()дзвінок з index.php і додайте свій власний код після), але є ще пара речі, які ви могли подивитися:

  • Експортуйте свій тип вмісту (а це бази та екземпляри поля) за допомогою модуля Особливості. ІМО, ви все одно повинні це робити.
  • Створіть простий модуль "Змінення сайту" та включіть такі речі в гачки оновлення. Зауважте, що якщо ви хочете це зробити, вам слід створити порожній модуль (без гаків оновлення), включити його на своєму веб-сайті, а потім додати свій гачок оновлення, щоб Drupal побачив оновлення.

Багато сайтів, над якими я працював, мали поєднання обох цих рішень. Конфігурація повинна в основному переходити до експортованих модулів функцій, і все, що не може (ви дійсно впевнені, що не може?), Може перейти в гачок оновлення.


Дякуємо за поради, спеціально за інформацію про використання гачків для оновлення. дуже корисно
Аліреза Табатабайський

Не могли б ви зазначити деякі проблеми, які можуть бути спричинені запуском PHP-кодів цього підходу? Я маю на увазі приєднання полів до деяких типів вмісту просто за допомогою PHP-скриптів?
Аліреза Табатабайський

18

Так, є, але враховуючи ваш опис, цікаво, чи допоможе вам:

  1. Встановіть модуль Devel
  2. Перейдіть на http: // yoursite / devel / php
  3. Введіть свій код і виконайте його.

1
Модуль Devel також постачається з блоком "Execute PHP", який можна розмістити в регіоні.
Без кашлю

12

Якщо вам потрібно запустити код лише один раз, ви можете це зробити, не встановлюючи жодного модуля, включаючи модуль Devel.

Напишіть файл PHP (наприклад, task.php ), покладіть його там, де є файл cron.php, який постачається з Drupal, і додайте наступний код.

/**
 * Root directory of Drupal installation.
 */
define('DRUPAL_ROOT', getcwd());

include_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
drupal_set_time_limit(240);

// Your code here.

Якщо ви вже використовуєте Drush для підтримки / розгортання свого сайту, тоді ви можете зробити сценарій Drush . Таким чином, він може бути виконаний CLI, і він може отримувати будь-які аргументи, що робить його повторно використаним для багатьох випадків.

#!/usr/bin/env drush

// Your code here.
// Access the options with drush_get_option(), or any argument with drush_shift().

Ви також можете виконати сценарій PHP за допомогою drush php-eval(або просто drush ev), наприклад:

drush php-eval 'print time();'

Я створив би сценарій Drush, але якщо ви не можете встановити Drush або вам потрібно виконати PHP-код з браузера, перший метод працює чудово.


10

Додайте фрагмент коду до файлу та збережіть його як file_name.phpу кореневій папці сайту Drupal. Потім запустіть таку команду в терміналі з кореневої папки сайту Drupal як робочого каталогу:

drush scr file_name.php

Ця команда виконає ваш файл PHP. (Щоб отримати уявлення про виконання, ви можете включити у свій файл деякі заяви про друк, які будуть виводити текст, змінні значення тощо на термінал, де ви виконуєте команду drush.)

Примітка: як обов'язкова умова, вам потрібно drushвстановити у вашій системі.


3

Ви можете використовувати Phpвбудований модуль Devel, але дозволяє вам отримати один з моїх прийомів в drupal, щоб запустити мій спеціальний код без модуля.

спочатку створіть menu itemвhook_menu

function yourmdoule_menu()
{

    $items['ytest'] = array(
        'title' => 'my debug and devel test tool ',
        'description' => 'create for debug and faster develop',
        'page callback' => 'my_function',
        'type' => MENU_CALLBACK,
        'access callback' => true,
    );
    return $items;
}

function my_function{

/// run every want you want
}

потім очистіть кеш (тому що пункти меню, кешовані в drupal), і my_functionвведіть все, що вам потрібно, і просто наберітьyoursite.com/ytest

Сподіваюся, це допоможе вам у проектах "дада";)


@AlirezaTabatabaeian Вас вітає "dada", я буду радий, коли побачиш тут іранського друпаліста,;)
Yusef

2

Мета модулів Drupal полягає в наданні окремої логіки певним компонентам, щоб вони могли бути відключені, якщо щось піде не так.

hook_install/hook_update

У вашому випадку, який створює нове поле одноразово, ідеальним сценарієм є використання hook_installабо hook_update.

Якщо у вас немає спеціального модуля (btw. Ви також можете використовувати для цього експортований модуль функції), створіть новий лише для оновлень (наприклад site_updates). В Drupal 7, все , що вам потрібно , щоб створити папку з 3 -х файлів: .info, .moduleа .installй визначити установки або оновлення гак у вашому .install. Використовувати гачок встановлення / оновлення зручно для того, щоб мати послідовне середовище, особливо коли у вас є кілька серверів Drupal (таких як розробник, тест і продакшн), тому зміни можна викликати під час наступного розгортання.

Якщо ви все ще не хочете створювати модуль, ось інші методи.

Одноразове виконання

Якщо вам потрібно лише один раз виконати певний код PHP, ви можете:

  • Активуйте модуль Devel і вставте код на /devel/php,
  • Використовуйте CLI (та його / команду) для виконання PHP-коду, наприкладdrush evalev

    drush ev 'field_create_field(["field_name"=>"foo", "type"=>"image"]);'
    drush ev 'print_r(field_info_field("foo"));'
  • Використовуйте drush scrдля виконання сценарію PHP:

    drush scr my_file.php

    де my_file.phpпростий скрипт PHP з кодом для виконання.

Конкретне виконання сторінки

Щоб виконати спеціальний код на певних сторінках або компонентах:

  • Скористатися template.phpфайл у вашій користувальницької теми (наприклад template_preprocess_node, template_preprocess_block, template_preprocess_page).
  • Ви можете використовувати модуль PHP, який забезпечує фільтр , щоб ви могли писати PHP-код всередині вузлів, блоків, подань тощо.

Виконання всіх сторінок

Щоб додати і запустити PHP-код на кожній сторінці без написання модуля, ви можете:

  • Використовуйте settings.phpдля цього файл. Рекомендується лише для простого коду, такого як перестановка конфігурації. В іншому випадку ви повинні використовувати hook_initдля цього як частину власного модуля.
  • Активуйте текстовий фільтр PHP , а потім створіть блок із спеціальним кодом PHP у ньому та розмістіть його в області нижнього колонтитулу.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.