मॉड्यूल लिखे बिना मैं 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);

क्या मॉड्यूल को लिखने, इसे स्थापित करने, इसे चलाने और इसे अनइंस्टॉल करने की आवश्यकता के बिना सीधे Drupal में PHP कोड चलाने का एक तरीका है?


मेरे प्रश्न के लिए काम करने वाले उत्तर और अच्छे संस्करणों दोनों के लिए सभी को धन्यवाद। मैंने अपनी समस्या के समाधान के रूप में सभी उत्तरों को वोट दिया, अब मेरे लिए उन उत्तरों में से एक का चयन करना कठिन निर्णय है क्योंकि सबसे अच्छा समाधान आपके काम का कारण बनता है।
Alireza Tabatabaeian

1
यदि आपको वह कोड दिखाना है जिसे आपको चलाने की आवश्यकता है, तो उत्तर अधिक पूर्ण होंगे।
kiamlaluno

@kiamlaluno सलाह के लिए धन्यवाद, मैं अपने सवाल पर PHP स्निपेट संलग्न करूंगा।
अलीरज़ा तबताबाई

जवाबों:


6

यदि आप कह रहे हैं "मुझे कुछ PHP चलाने की आवश्यकता है" और "मुझे एक मॉड्यूल की आवश्यकता नहीं है" तो उसी विचार में, मेरा सुझाव है कि आप गलत रास्ते पर जा रहे हैं, या तो इस विशिष्ट समस्या के लिए। , या सामान्य रूप से साइट के निर्माण के लिए दृष्टिकोण।

drush scrयदि आप वास्तव में जाना चाहते हैं तो वह दिशा आपकी मदद करेगी, या आप एक स्वसंपूर्ण PHP स्क्रिप्ट लिख सकते हैं (मूल रूप drupal_bootstrap()से index.php से कॉल के माध्यम से सब कुछ कॉपी / पेस्ट करें, और बाद में अपना कस्टम कोड जोड़ें), लेकिन कुछ और हैं जिन चीजों को आप देख सकते हैं:

  • फीचर्स मॉड्यूल के साथ अपना कंटेंट टाइप (और यह फील्ड बेस और इंस्टेंस है) एक्सपोर्ट करें। IMO, आपको वैसे भी ऐसा करना चाहिए।
  • एक सरल "साइट संशोधनों" मॉड्यूल बनाएं, और अपडेट हुक में इस तरह की चीजें शामिल करें। ध्यान दें कि यदि आप ऐसा करना चाहते हैं, तो आपको एक खाली मॉड्यूल बनाना चाहिए (जिसमें कोई अपडेट हुक नहीं है), इसे अपनी साइट पर सक्षम करें, और फिर अपडेट देखने के लिए Drupal प्राप्त करने के लिए अपना अपडेट हुक जोड़ें।

कई साइटें जिन पर मैंने काम किया है, उन दोनों समाधानों का एक संयोजन है। कॉन्फिगरेशन ज्यादातर एक्सपोर्टेड फीचर्स मॉड्यूल्स में जाना चाहिए और ऐसा कुछ भी नहीं हो सकता है (क्या आपको वाकई यकीन है कि यह नहीं कर सकता?) अपडेट हुक में जा सकता है।


विशेष रूप से अपडेट हुक के उपयोग के बारे में सूचित करने के लिए सलाह के लिए धन्यवाद। बहुत उपयोगी है
अलिर्ज़ा तबातबाईयन

क्या आप कृपया कुछ समस्याओं का उल्लेख कर सकते हैं, जो इस दृष्टिकोण को PHP कोड चलाने के कारण हो सकती हैं? मेरा मतलब है कि कुछ सामग्री प्रकारों को केवल PHP स्क्रिप्स चलाकर फ़ील्ड संलग्न करना है?
एलेरज़ा तबातबाईन

18

हाँ, वहाँ है, लेकिन अपने विवरण दिया मुझे आश्चर्य है कि यह आपकी मदद करेगा:

  1. मॉड्यूल डेवेल स्थापित करें
  2. पर जाएं http: // yoursite / devel / php
  3. अपना कोड दर्ज करें और इसे निष्पादित करें।

1
देवल मॉड्यूल "एक्सक्यूट PHP" ब्लॉक के साथ भी आता है, जिसे आप किसी क्षेत्र में रख सकते हैं।
कोई Sssweat

12

यदि आपको केवल एक बार कोड चलाने की आवश्यकता है, तो आप इसे बिना किसी मॉड्यूल को स्थापित किए बिना कर सकते हैं, जिसमें डेवेल मॉड्यूल भी शामिल है।

एक PHP फ़ाइल लिखें (जैसे task.php ), इसे ड्रुपल के साथ आने वाली cron.php फ़ाइल में डालें और निम्न कोड जोड़ें।

/**
 * 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 स्क्रिप्ट बना सकते हैं । इस तरह, इसे सीएलआई द्वारा निष्पादित किया जा सकता है, और यह किसी भी तर्क को प्राप्त कर सकता है, जिससे यह कई अवसरों के लिए पुन: प्रयोज्य हो सकता है।

#!/usr/bin/env drush

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

आप उदाहरण के लिए drush php-eval(या सिर्फ drush ev) के साथ एक PHP स्क्रिप्ट निष्पादित कर सकते हैं :

drush php-eval 'print time();'

मैं एक Drush स्क्रिप्ट बनाऊंगा, लेकिन यदि आप Drush इंस्टॉल नहीं कर सकते हैं, या आपको ब्राउज़र से PHP कोड निष्पादित करने की आवश्यकता है, तो पहली विधि ठीक है।


10

फ़ाइल में अपना कोड स्निपेट जोड़ें और फ़ाइल को file_name.phpअपने Drupal साइट रूट फ़ोल्डर में सहेजें । फिर Drupal साइट रूट फ़ोल्डर में अपनी वर्किंग डायरेक्टरी के रूप में, टर्मिनल में निम्न कमांड चलाएँ:

drush scr file_name.php

यह कमांड आपकी PHP फाइल को एग्जीक्यूट करेगा। (निष्पादन का विचार प्राप्त करने के लिए, आप अपनी फ़ाइल में कुछ प्रिंट स्टेटमेंट शामिल कर सकते हैं, जो पाठ, चर मान इत्यादि को उस टर्मिनल पर आउटपुट करेगा जहाँ आप ड्रश कमांड निष्पादित करते हैं।)

नोट: एक शर्त के रूप में, आपको drushअपने सिस्टम पर स्थापित होना चाहिए ।


3

आप डेवेल मॉड्यूल केPhp इनलाइन का उपयोग कर सकते हैं, लेकिन आपको ड्रुपल में मेरे किसी भी कोड को बिना किसी मॉड्यूल के चलाने की अनुमति देता है।

पहली बार एक बनाने 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
}

फिर कैश को साफ़ करें (क्योंकि ड्रूप में मेनू आइटम कैश्ड हैं), और वह सब कुछ डालें जो आप चाहते हैं my_functionऔर बस टाइप करेंyoursite.com/ytest

मुझे आशा है कि यह आपको परियोजनाओं में मदद करेगा "दादा";)


@AlirezaTabatabaeian आप "दादा" का स्वागत कर रहे हैं, मुझे खुशी होगी जब मैं ईरानी ड्रुपालिस्ट को यहां देखूंगा;)
युसेफ

2

Drupal मॉड्यूल का लक्ष्य कुछ घटकों को अलग तर्क प्रदान करना है, इसलिए यदि कुछ गलत होता है तो उन्हें अक्षम किया जा सकता है।

hook_install/hook_update

आपके मामले में जो एक समय के आधार पर एक नया क्षेत्र बना रहा है, आदर्श परिदृश्य hook_installया तो उपयोग करना है या hook_update

यदि आपके पास कोई कस्टम मॉड्यूल नहीं है (btw। आप इसके लिए निर्यात किए गए फ़ीचर मॉड्यूल का भी उपयोग कर सकते हैं), केवल अपडेट के लिए एक नया बनाएं (जैसे site_updates)। : Drupal 7 में, आप सभी की जरूरत 3 फाइलों के साथ फ़ोल्डर बनाने के लिए है .info, .moduleऔर .installऔर परिभाषित अपने में स्थापित करने या अपडेट हुक .install। सुसंगत वातावरण के लिए इंस्टॉल / अपडेट हुक का उपयोग करना सुविधाजनक है, खासकर जब आप कई ड्रुपल सर्वर (जैसे देव, परीक्षण और ठेस) के रूप में उपयोग करते हैं, इसलिए अगली तैनाती के दौरान परिवर्तन को लागू किया जा सकता है।

यदि आप अभी भी मॉड्यूल नहीं बनाना चाहते हैं, तो यहां अन्य तरीके हैं।

एक बार का निष्पादन

यदि आपको केवल एक बार ही कुछ PHP कोड निष्पादित करने की आवश्यकता है, तो आप कर सकते हैं:

  • Devel मॉड्यूल सक्रिय करें और कोड को यहां चिपकाएं /devel/php,
  • PHP कोड को निष्पादित करने के लिए CLI (और इसके / कमांड) का उपयोग करें , जैसेdrush evalev

    drush ev 'field_create_field(["field_name"=>"foo", "type"=>"image"]);'
    drush ev 'print_r(field_info_field("foo"));'
  • drush scrPHP स्क्रिप्ट निष्पादित करने के लिए उपयोग करें :

    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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.