ฉันจะรันโค้ด PHP โดยไม่ต้องเขียนโมดูลได้อย่างไร


15

ฉันต้องการแนบฟิลด์กับบันเดิลบางตัว ตัวอย่าง PHP จะทำงานให้ฉันดังนั้นฉันจึงไม่จำเป็นต้องมีโมดูลข้อมูลโค้ดด้านล่างคือสิ่งที่ต้องดำเนินการ:

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

จากนั้น snippet เพื่อเพิ่มฟิลด์นี้ลงในบันเดิล:

// 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 โดยไม่จำเป็นต้องเขียนโมดูลติดตั้งใช้งานและถอนการติดตั้งหรือไม่


ขอบคุณทุกคนสำหรับคำตอบการทำงานและรุ่นที่ดีสำหรับคำถามของฉัน ฉันโหวตให้คำตอบทั้งหมดเพื่อแก้ปัญหาของฉันตอนนี้มันเป็นการตัดสินใจที่ยากสำหรับฉันที่จะเลือกคำตอบหนึ่งในนั้นเพราะทางออกที่ดีที่สุดทำให้การทำงานทั้งหมดดีขึ้น
Alireza Tabatabaeian

1
หากคุณต้องแสดงรหัสที่คุณต้องเปิดใช้งานคำตอบจะสมบูรณ์ยิ่งขึ้น
kiamlaluno

@ kiamlaluno ขอบคุณสำหรับคำแนะนำฉันจะแนบตัวอย่าง PHP กับคำถามของฉัน
Alireza Tabatabaeian

1
คำถามและคำตอบที่เกี่ยวข้องอย่างใกล้ชิด: วิธีการรันสคริปต์ PHP โดยใช้ drush ?
tanius

คำตอบ:


6

หากคุณกำลังพูดว่า "ฉันต้องเรียกใช้ PHP" และ "ฉันไม่ต้องการโมดูล" ในความคิดเดียวกันฉันขอแนะนำให้คุณลงเส้นทางที่ผิดทั้งในแนวทางของปัญหานี้ หรือวิธีการสร้างเว็บไซต์โดยทั่วไป

drush scrจะช่วยคุณถ้านั่นคือทิศทางที่คุณต้องการจริงๆหรือคุณสามารถเขียนสคริปต์ PHP แบบสแตนด์อโลน (โดยทั่วไปเพียงแค่คัดลอก / วางทุกอย่างผ่านการdrupal_bootstrap()โทรจาก index.php และเพิ่มรหัสที่กำหนดเองของคุณหลังจากนั้น) แต่ก็มีอีกสองสามอย่าง สิ่งที่คุณสามารถดู:

  • ส่งออกประเภทเนื้อหาของคุณ (และเป็นฟิลด์ฐานและอินสแตนซ์) ด้วยโมดูลคุณสมบัติ IMO คุณควรจะทำเช่นนี้ต่อไป
  • สร้างโมดูล "การปรับเปลี่ยนไซต์" แบบง่าย ๆ และรวมสิ่งต่าง ๆ ไว้ในตะขอการอัพเดท โปรดทราบว่าหากคุณต้องการทำสิ่งนี้คุณควรสร้างโมดูลเปล่า (โดยไม่มี hooks การอัพเดท) เปิดใช้งานบนเว็บไซต์ของคุณแล้วเพิ่ม hook การอัปเดตของคุณเพื่อรับ Drupal เพื่อดูการอัปเดต

เว็บไซต์หลายแห่งที่ฉันเคยทำมีทั้งสองวิธีรวมกัน การกำหนดค่าส่วนใหญ่ควรจะไปเข้าส่งออกโมดูลคุณสมบัติและสิ่งที่ไม่สามารถ (ที่คุณจริงๆว่ามันไม่สามารถ) สามารถไปลงเบ็ดปรับปรุง


ขอบคุณสำหรับคำแนะนำเป็นพิเศษสำหรับการแจ้งเกี่ยวกับการใช้ hooks การอัพเดท มีประโยชน์มาก
Alireza Tabatabaeian

คุณช่วยกรุณาพูดถึงปัญหาบางอย่างที่อาจเกิดจากการใช้รหัส PHP ในแนวทางนี้ได้หรือไม่? ฉันหมายถึงการแนบฟิลด์กับเนื้อหาบางประเภทเพียงแค่เรียกใช้ PHP scrips?
Alireza Tabatabaeian

18

ใช่มี แต่ให้คำอธิบายของคุณฉันสงสัยว่ามันจะช่วยให้คุณ:

  1. ติดตั้งโมดูล Devel
  2. ไปที่ http: // yoursite / devel / php
  3. ป้อนรหัสของคุณและดำเนินการ

1
โมดูล Devel ยังมาพร้อมกับบล็อก "Execute PHP" ที่คุณสามารถวางได้ในภูมิภาค
ไม่มี Sssweat

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

ฉันหวังว่ามันจะช่วยคุณในโครงการ "dada";)


@AlirezaTabatabaeian คุณยินดีต้อนรับ "dada" ฉันจะดีใจเมื่อเห็นอิหร่าน Drupalist ที่นี่,)
Yusef

2

เป้าหมายของโมดูล Drupal คือการให้ตรรกะแยกต่างหากกับองค์ประกอบบางอย่างดังนั้นจึงสามารถปิดใช้งานได้หากมีสิ่งผิดปกติ

hook_install/hook_update

ในกรณีของคุณซึ่งจะสร้างสนามใหม่บนพื้นฐานเพียงครั้งเดียวสถานการณ์ที่เหมาะที่จะใช้อย่างใดอย่างหนึ่งหรือhook_installhook_update

หากคุณไม่มีโมดูลที่กำหนดเอง (btw คุณยังสามารถใช้โมดูลคุณลักษณะที่ส่งออกสำหรับสิ่งนั้น) สร้างโมดูลใหม่สำหรับการอัปเดต (เช่นsite_updates) ใน Drupal 7 สิ่งที่คุณต้องการคือการสร้างโฟลเดอร์ที่มี 3 ไฟล์: .info, .moduleและและกำหนดติดตั้งหรือปรับปรุงในเบ็ดของคุณ.install .installการใช้ install / update hook นั้นสะดวกสบายเพื่อให้มีสภาพแวดล้อมที่สอดคล้องกันโดยเฉพาะเมื่อคุณมีเซิร์ฟเวอร์ Drupal หลายตัว (เช่น dev, test และ prod) เพื่อให้สามารถเรียกใช้การเปลี่ยนแปลงในระหว่างการปรับใช้ครั้งถัดไป

หากคุณยังไม่ต้องการสร้างโมดูลนี่คือวิธีการอื่น ๆ

ดำเนินการครั้งเดียว

หากคุณต้องการใช้งานโค้ด 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 ที่กำหนดเองในนั้นและวางบล็อกลงในภูมิภาคส่วนท้าย
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.