Làm thế nào tôi có thể chạy mã PHP mà không cần viết một mô-đun?


15

Tôi cần phải gắn một trường vào một số gói. Một đoạn mã PHP sẽ thực hiện công việc cho tôi, vì vậy tôi không cần một mô-đun. Đoạn mã dưới đây là những gì phải được thực thi:

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

và sau đó đoạn trích để thêm trường này vào gói:

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

Có cách nào để chạy mã PHP trực tiếp trong Drupal mà không cần phải viết mô-đun, cài đặt nó, làm cho nó chạy và gỡ cài đặt nó không?


Cảm ơn tất cả mọi người cho cả câu trả lời làm việc và phiên bản tốt cho câu hỏi của tôi. Tôi đã bình chọn tất cả các câu trả lời là giải pháp cho vấn đề của mình, bây giờ việc quyết định chọn một trong những câu trả lời đó là giải pháp tốt nhất là một quyết định khó khăn.
Alireza Tabatabaeian

1
Nếu bạn đã hiển thị mã bạn cần chạy, câu trả lời sẽ đầy đủ hơn.
kiamlaluno

@kiamlaluno Cảm ơn lời khuyên, tôi sẽ đính kèm đoạn trích PHP vào câu hỏi của tôi.
Alireza Tabatabaeian

1
Câu hỏi và câu trả lời liên quan chặt chẽ: Làm thế nào để thực thi tập lệnh php bằng cách sử dụng drush ?
tanius

Câu trả lời:


6

Nếu bạn đang nói "Tôi cần chạy một số PHP" và "Tôi không cần một mô-đun" trong cùng một suy nghĩ, tôi khuyên bạn nên đi sai đường, theo cách tiếp cận vấn đề cụ thể này hoặc cách tiếp cận để xây dựng trang web nói chung.

drush scrsẽ giúp bạn nếu đó là hướng mà bạn thực sự muốn đi hoặc bạn có thể viết một tập lệnh PHP độc lập (về cơ bản chỉ cần sao chép / dán mọi thứ thông qua drupal_bootstrap()cuộc gọi từ index.php và thêm mã tùy chỉnh của bạn sau) nhưng có một vài thứ khác những thứ bạn có thể nhìn vào:

  • Xuất loại nội dung của bạn (và đó là cơ sở và trường hợp của trường) với mô-đun Tính năng. IMO, dù sao bạn cũng nên làm điều này.
  • Tạo một mô-đun "sửa đổi trang web" đơn giản và bao gồm những thứ như thế này trong các móc cập nhật. Lưu ý rằng nếu bạn muốn làm điều này, bạn nên tạo một mô-đun trống (không có móc cập nhật), bật nó trên trang web của bạn và sau đó thêm móc cập nhật của bạn để có được Drupal để xem bản cập nhật.

Nhiều trang web mà tôi đã làm việc đã có sự kết hợp của cả hai giải pháp đó. Cấu hình chủ yếu nên đi vào các mô-đun Tính năng được xuất và bất kỳ thứ gì không thể (bạn có thực sự chắc chắn không thể?) Có thể đi vào một bản cập nhật.


Cảm ơn lời khuyên, đặc biệt để thông báo về việc sử dụng móc cập nhật. rất hữu ích
Alireza Tabatabaeian

Bạn có thể vui lòng đề cập đến một số vấn đề có thể do chạy mã PHP theo cách tiếp cận này không? Ý tôi là gắn các trường vào một số loại nội dung chỉ bằng cách chạy các đoạn mã PHP?
Alireza Tabatabaeian


12

Nếu bạn cần chạy mã chỉ một lần, bạn có thể làm điều đó mà không cần cài đặt bất kỳ mô-đun nào, kể cả mô-đun Devel.

Viết một tệp PHP (ví dụ: task.php ), đặt nó ở nơi tệp cron.php đi kèm với Drupal và thêm đoạn mã sau.

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

Nếu bạn đã sử dụng Drush để duy trì / triển khai trang web của mình, thì bạn có thể tạo tập lệnh Drush . Theo cách này, nó có thể được CLI thực thi và nó có thể nhận được bất kỳ đối số nào, khiến nó có thể được sử dụng lại trong nhiều trường hợp.

#!/usr/bin/env drush

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

Bạn cũng có thể thực thi một tập lệnh PHP bằng drush php-eval(hoặc chỉ drush ev), ví dụ:

drush php-eval 'print time();'

Tôi sẽ tạo một tập lệnh Drush, nhưng nếu bạn không thể cài đặt Drush hoặc bạn cần thực thi mã PHP từ trình duyệt, phương thức đầu tiên hoạt động tốt.


10

Thêm đoạn mã của bạn vào một tệp và lưu tệp như file_name.phptrong thư mục gốc trang web Drupal của bạn. Sau đó chạy lệnh sau trong một thiết bị đầu cuối, từ trong thư mục gốc của trang web Drupal làm thư mục làm việc của bạn:

drush scr file_name.php

Lệnh này sẽ thực thi tệp PHP của bạn. (Để có ý tưởng về việc thực thi, bạn có thể bao gồm một số câu lệnh in trong tệp của mình, nó sẽ xuất văn bản, giá trị biến, v.v. đến thiết bị đầu cuối nơi bạn thực hiện lệnh drush.)

Lưu ý: Là điều kiện tiên quyết, bạn cần phải drushcài đặt trên hệ thống của mình.


3

Bạn có thể sử dụng Phpnội tuyến của mô-đun Devel nhưng cho phép bạn sử dụng một trong những thủ thuật của tôi để chạy mã tùy chỉnh mà không cần bất kỳ mô-đun nào.

đầu tiên tạo ra một menu itemtronghook_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
}

sau đó xóa bộ đệm (vì các mục menu được lưu trong bộ đệm) và đặt mọi thứ bạn muốn vào my_functionvà chỉ cần gõyoursite.com/ytest

Tôi hy vọng nó sẽ giúp bạn trong các dự án "dada";)


@AlirezaTabatabaeian bạn được chào đón "dada", tôi sẽ rất vui khi thấy Drupalist Iran ở đây ,;)
Yusef

2

Mục tiêu của các mô-đun Drupal là cung cấp logic riêng cho các thành phần nhất định, do đó chúng có thể bị vô hiệu hóa nếu có sự cố.

hook_install/hook_update

Trong trường hợp của bạn đang tạo một trường mới trên cơ sở một lần, kịch bản lý tưởng là sử dụng một trong hai hook_installhoặc hook_update.

Nếu bạn không có mô-đun tùy chỉnh (btw. Bạn cũng có thể sử dụng mô-đun tính năng được xuất cho điều đó), hãy tạo mô-đun mới chỉ để cập nhật (ví dụ site_updates). Trong Drupal 7, bạn chỉ cần có để tạo thư mục với 3 tác phẩm: .info, .module.installvà xác định cài đặt hoặc cập nhật móc trong của bạn .install. Sử dụng hook cài đặt / cập nhật thuận tiện để có môi trường nhất quán, đặc biệt là khi bạn có nhiều máy chủ Drupal (như dev, test và prod), do đó, thay đổi có thể được gọi trong lần triển khai tiếp theo.

Nếu bạn vẫn không muốn tạo mô-đun, đây là các phương pháp khác.

Thi công một lần

Nếu bạn chỉ cần thực thi một số mã PHP nhất định một lần, bạn có thể:

  • Kích hoạt mô-đun Devel và dán mã tại /devel/php,
  • Sử dụng CLI (và lệnh / lệnh của nó ) để thực thi mã PHP, vddrush evalev

    drush ev 'field_create_field(["field_name"=>"foo", "type"=>"image"]);'
    drush ev 'print_r(field_info_field("foo"));'
  • Sử dụng drush scrđể thực thi tập lệnh PHP:

    drush scr my_file.php

    nơi my_file.phplà PHP kịch bản đơn giản của bạn với mã của bạn để thực thi.

Thực hiện trang cụ thể

Để thực thi mã tùy chỉnh trên các trang hoặc thành phần nhất định:

Tất cả thực hiện trang

Để thêm và chạy mã PHP trên mỗi trang mà không cần viết mô-đun, bạn có thể:

  • Sử dụng một settings.phptập tin cho điều đó. Nó chỉ được khuyến nghị cho mã đơn giản như ghi đè cấu hình. Nếu không, bạn nên sử dụng hook_initcho điều đó như là một phần của mô-đun tùy chỉnh của bạn.
  • Kích hoạt bộ lọc văn bản PHP , sau đó tạo một khối có mã PHP tùy chỉnh trong đó và đặt khối vào khu vực chân trang.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.