Bagaimana saya bisa menjalankan kode PHP tanpa menulis modul?

15

Saya perlu melampirkan bidang ke beberapa bundel. Cuplikan PHP akan melakukan pekerjaan untuk saya, jadi saya tidak perlu modul. Cuplikan di bawah ini yang harus dijalankan:

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

lalu potongan untuk menambahkan bidang ini ke bundel:

// 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);

Apakah ada cara untuk menjalankan kode PHP langsung di Drupal, tanpa perlu menulis modul, menginstalnya, membuatnya berjalan, dan menghapus instalannya?

Alireza Tabatabaeian
sumber
Terima kasih semuanya atas jawaban yang berhasil dan edisi yang bagus untuk pertanyaan saya. Saya memilih semua jawaban sebagai solusi untuk masalah saya, sekarang ini adalah keputusan yang sulit bagi saya untuk memilih salah satu jawaban itu sebagai solusi terbaik karena semua pekerjaan.
Alireza Tabatabaeian
1
Jika Anda menunjukkan kode yang perlu Anda jalankan, jawabannya akan lebih lengkap.
kiamlaluno
@kiamlaluno Terima kasih atas sarannya, saya akan melampirkan cuplikan PHP pada pertanyaan saya.
Alireza Tabatabaeian
1
Pertanyaan & jawaban yang terkait erat: Bagaimana menjalankan skrip php menggunakan drush ?
tanius

Jawaban:

6

Jika Anda mengatakan "Saya perlu menjalankan beberapa PHP" dan "Saya tidak perlu modul" dalam pemikiran yang sama, saya sarankan Anda mengambil jalan yang salah, baik dalam pendekatan untuk masalah khusus ini , atau pendekatan untuk membangun situs secara umum.

drush scrakan membantu Anda jika itu arah yang benar-benar ingin Anda tuju, atau Anda dapat menulis skrip PHP mandiri (pada dasarnya cukup salin / tempelkan semuanya melalui drupal_bootstrap()panggilan dari index.php, dan tambahkan kode kustom Anda setelahnya) tetapi ada beberapa lainnya hal yang bisa Anda lihat:

  • Ekspor tipe konten Anda (dan ini adalah pangkalan dan instance bidang) dengan modul Fitur. IMO, Anda harus tetap melakukan ini.
  • Buat modul "modifikasi situs" sederhana, dan sertakan hal-hal seperti ini di kait pembaruan. Perhatikan bahwa jika Anda ingin melakukan ini, Anda harus membuat modul kosong (tanpa kait pembaruan), aktifkan di situs Anda, dan kemudian tambahkan kait pembaruan Anda untuk membuat Drupal melihat pembaruan.

Banyak situs yang telah saya kerjakan memiliki kombinasi kedua solusi tersebut. Config sebagian besar harus masuk ke modul Fitur yang diekspor, dan apa pun yang tidak bisa (apakah Anda benar-benar yakin tidak bisa?) Dapat masuk ke hook pembaruan.

cweagans
sumber
Terima kasih atas sarannya, khususnya untuk menginformasikan tentang penggunaan kait pembaruan. sangat berguna
Alireza Tabatabaeian
Bisakah Anda sebutkan beberapa masalah yang mungkin disebabkan oleh menjalankan kode PHP pendekatan ini? Maksud saya melampirkan bidang ke beberapa jenis konten hanya dengan menjalankan skrip PHP?
Alireza Tabatabaeian
18

Ya, memang ada, tapi berikan deskripsi Anda, saya ingin tahu apakah itu akan membantu Anda:

  1. Instal modul Devel
  2. Pergi ke http: // situs Anda / devel / php
  3. Masukkan kode Anda dan jalankan.
Miloš Kroulík
sumber
1
Modul Devel juga dilengkapi dengan blok "Execute PHP", yang dapat Anda tempatkan di suatu wilayah.
Tidak ada Sssweat
12

Jika Anda perlu menjalankan kode hanya sekali, Anda dapat melakukannya tanpa menginstal modul apa pun, termasuk modul Devel.

Tulis file PHP (mis. Task.php ), letakkan di tempat file cron.php yang menyertai Drupal, dan tambahkan kode berikut.

/**
 * 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.

Jika Anda sudah menggunakan Drush untuk memelihara / menyebarkan situs Anda, maka Anda bisa membuat skrip Drush . Dengan cara ini, dapat dieksekusi oleh CLI, dan dapat menerima argumen apa pun, membuatnya dapat digunakan kembali untuk banyak kesempatan.

#!/usr/bin/env drush

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

Anda juga dapat menjalankan skrip PHP dengan drush php-eval(atau hanya drush ev), misalnya:

drush php-eval 'print time();'

Saya akan membuat skrip Drush, tetapi jika Anda tidak dapat menginstal Drush, atau Anda perlu menjalankan kode PHP dari browser, metode pertama berfungsi dengan baik.

kiamlaluno
sumber
10

Tambahkan potongan kode Anda ke file dan simpan file seperti file_name.phpdi folder root situs Drupal Anda. Kemudian jalankan perintah berikut di terminal, dari dalam folder root situs Drupal sebagai direktori kerja Anda:

drush scr file_name.php

Perintah ini akan mengeksekusi file PHP Anda. (Untuk mendapatkan gagasan tentang eksekusi, Anda dapat menyertakan beberapa pernyataan cetak dalam file Anda, yang akan menampilkan teks, nilai variabel dll. Ke terminal tempat Anda menjalankan perintah drush.)

Catatan: Sebagai prasyarat, Anda harus drushmenginstal pada sistem Anda.

Suresh R
sumber
3

Anda dapat menggunakan Phpinline dari modul Devel tetapi membiarkan Anda mendapatkan salah satu trik saya di drupal untuk menjalankan kode kustom saya tanpa modul apa pun.

buat dulu menu iteminhook_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
}

kemudian bersihkan cache (karena item menu di-cache dalam drupal), dan masukkan semua yang Anda inginkan my_functiondan ketikkan sajayoursite.com/ytest

Saya harap ini akan membantu Anda dalam proyek "dada";)

Yusef
sumber
@AlirezaTabatabaeian sama-sama "dada", saya akan senang ketika melihat Drupalis Iran di sini,;)
Yusef
2

Tujuan dari modul Drupal adalah untuk menyediakan logika terpisah untuk komponen-komponen tertentu, sehingga mereka dapat dinonaktifkan jika terjadi kesalahan.

hook_install/hook_update

Dalam kasus Anda yang membuat bidang baru satu kali, skenario ideal adalah menggunakan salah satu hook_installatau hook_update.

Jika Anda tidak memiliki modul khusus (btw. Anda juga dapat menggunakan modul fitur yang diekspor untuk itu), buat yang baru hanya untuk pembaruan (mis site_updates.). Di Drupal 7, yang Anda butuhkan adalah untuk membuat folder dengan 3 file: .info, .moduledan .installdan menentukan menginstal atau memperbarui kail di Anda .install. Menggunakan kait instal / perbarui nyaman agar memiliki lingkungan yang konsisten, terutama ketika Anda memiliki beberapa server Drupal (seperti dev, test dan prod), sehingga perubahan dapat dilakukan selama penyebaran berikutnya.

Jika Anda masih tidak ingin membuat modul, berikut adalah metode lain.

Eksekusi satu kali

Jika Anda hanya perlu mengeksekusi kode PHP tertentu hanya satu kali, Anda dapat:

  • Aktifkan modul Devel dan rekatkan kode di /devel/php,
  • Gunakan CLI (dan / perintahnya) untuk mengeksekusi kode PHP, misdrush evalev

    drush ev 'field_create_field(["field_name"=>"foo", "type"=>"image"]);'
    drush ev 'print_r(field_info_field("foo"));'
  • Gunakan drush scruntuk menjalankan skrip PHP:

    drush scr my_file.php

    di mana my_file.phpskrip PHP biasa Anda dengan kode Anda untuk mengeksekusi.

Eksekusi halaman tertentu

Untuk menjalankan kode khusus pada halaman atau komponen tertentu:

Semua eksekusi halaman

Untuk menambah dan menjalankan kode PHP pada setiap halaman tanpa menulis modul, Anda dapat:

  • Gunakan settings.phpfile untuk itu. Hanya disarankan untuk kode sederhana seperti konfigurasi override. Kalau tidak, Anda harus menggunakannya hook_inituntuk itu sebagai bagian dari modul khusus Anda.
  • Aktifkan filter teks PHP , lalu buat blok dengan kode PHP khusus di dalamnya dan tempatkan blok ke wilayah footer.
kenorb
sumber