আমি কীভাবে ড্রুপাল কোর সম্পাদনা এড়াতে পারি?


21

আমি একটি অংশীদার এক্সএমএল পরিষেবাটির সাথে একটি এক্সচেঞ্জ তৈরি করছিলাম, এবং আমি এক্সএমএলটি সঠিকভাবে পেতে পারি না, তবে ড্রপাল সমস্ত জিনিসগুলির মতো, এক্সএমএলআরপিসি ত্রুটি এবং অ্যাকশন লগিং দৃ rob়তার চেয়ে কম less

সুতরাং আমি এর মধ্যে / xMLrpc.inc অন্তর্ভুক্ত করেছি।

function xmlrpc_request($method, $args) {
  $xmlrpc_request = new stdClass();
  $xmlrpc_request->method = $method;
  $xmlrpc_request->args = $args;
  $xmlrpc_request->xml = <<<EOD
<?xml version="1.0"?>
<methodCall>
<methodName>{$xmlrpc_request->method}</methodName>
<params>
EOD;
  foreach ($xmlrpc_request->args as $arg) {
    $xmlrpc_request->xml .= '<param><value>';
    $v = xmlrpc_value($arg);
    $xmlrpc_request->xml .= xmlrpc_value_get_xml($v);
    $xmlrpc_request->xml .= "</value></param>\n";
  }
  $xmlrpc_request->xml .= '</params></methodCall>';

  /* This part here */
  watchdog('xmlrpc',$xmlrpc_request->xml);
  /* End ridiculously tiny hack */

  return $xmlrpc_request;
}

আমি আমার প্রয়োজনীয় ডেটা পেয়েছি এবং 10 মিনিটের মধ্যে অংশীদার ইন্টারফেসটি আমার অনুরোধটির জন্য যথাযথভাবে প্রতিক্রিয়া জানিয়েছিল কারণ (আমি জানি হতবাক) লগগুলি ভাল good

আমি অতিরিক্ত লগিং পছন্দ করি, এবং আমি এটি রাখতে চাই। পরিষ্কার, সরল এবং সবচেয়ে গুরুত্বপূর্ণভাবে, ড্রুপাল-অনুমোদিত উপায়টি কী?


2
আমি কেন দেখছি না কেন এটি নিম্নমানের ছিল। হ্যাঁ, সম্পাদনা কোরকে নিরুৎসাহিত করা হয়েছে তবে @ ওহকাবাকা স্বীকার করেছেন যে এটি কীভাবে এটি পরিচালনা করতে হবে তার বিষয়ে পরামর্শ চাইছে এবং একটি বাস্তব-বিশ্বের উদাহরণ সরবরাহ করবে। পরিস্থিতি ডিবাগ করার প্রয়োজনীয়তার পাশাপাশি মূল সম্পাদনা করার বৈধ কারণ রয়েছে। ইস্যু কাতারে কোর ডাব্লু / ওয়ার্কিং প্যাচগুলিতে কিছু বাগ রয়েছে যা কেবল প্রয়োগ করা হবে না এবং কয়েকটি জিনিস রয়েছে যা সত্যিকারের কাজের ক্ষেত্র নেই ounds
এমপিডোনাদিও

1
নীচের উত্তরগুলি দুর্দান্ত। তবে একটি জিনিস আমি যুক্ত করব, এটি হ'ল আপনার লাইভ সাইটে সর্বদা আপনার লগিং চালু হওয়ার দরকার নেই। আপনি যখন এটি ব্যবহার করছেন না তখন আপনার কাস্টম মডিউলটি অক্ষম করুন বা আপনার প্যাচ বা মডিউলটি কেবলমাত্র আপনার ডেভ সাইটটিতে প্রয়োগ করুন। পরিবর্তনগুলি কমাতে এবং সাবধানে ডকুমেন্ট করা আপনাকে বুদ্ধিমান রাখবে।
গ্রেগ_এন্ডারসন

@ গ্রেগ_এন্ডারসন - আপনি দেখতে পাবেন যে নীচের আমার সমাধানটি ইতিমধ্যে লগ-লেভেল ভেরিয়েবলের মাধ্যমে এটির সমাধান করেছে (যদিও ধ্রুবকগুলি অবশ্যই পরিষ্কারকর হবে, আমি প্যাটার্নটিতে জোর দেওয়ার জন্য এগুলি বাদ দিয়েছি)। এইভাবে আপনি ডিভ / লাইভে একই র‍্যাপার পদ্ধতিটি ব্যবহার করতে পারেন এবং আপনার বাকী কোডটি চারপাশে ফাংশন কলগুলি পরিবর্তন না করেই এর উপর নির্ভর করতে পারে। আপনার যা দরকার তা হ'ল আপনার মডিউলের লগিং স্তরটি ব্যবহার করে variable_set()বা একটি অনুরূপ প্রক্রিয়া যা প্রয়োজন হলে রফতানি করা যায় সেট করে। :]
ডেভিড ওয়াটসন

1
@ ডেভিড: হ্যাঁ, এটি দুর্দান্ত। আমি ডেভ মডিউলগুলি লাইভে অক্ষম রাখতে চাইছি এবং তাদেরকে একটি পোস্ট- স্কেল -সিঙ্ক হুকে সক্ষম করুন, প্রতি শ্রুপকোড.অর্গ / প্রোজেক্ট / ডিআরশ.git / blob / HEAD: / example / আপনার কৌশলটিও শীর্ষ নম্বর পেয়েছে, যদিও আমি মনে করি আমি কোনও বৈশিষ্ট্যের পরিবর্তে কোনও ড্রশ পোস্ট-সিঙ্ক হুকের ক্ষেত্রেও ভেরিয়েবল_সেট করব। কেবলমাত্র দেব সিস্টেমে একটি প্যাচ প্রয়োগ করা, যেমন আমি উপরে বলেছি সম্ভবত এটি একটি খারাপ ধারণা, যদি না আপনি নিশ্চিত হন যে সিস্টেমটি সত্যিই একটি স্ক্র্যাচ সিস্টেম; অন্যথায় ম্যাচটি দুর্ঘটনাক্রমে প্রতিশ্রুতিবদ্ধ এবং ঠেলাঠেলি হতে পারে। সেকি।
গ্রেগ_এন্ডারসন

@ গ্রেগ_1_এন্ডারসন - আমি এই জাতীয় হুকগুলি উপস্থিত কিনা তা খতিয়ে দেখার অর্থ আসলেই আমি পেয়েছি, এবং বুঝতে পারি না যে জায়গায় ইতিমধ্যে উদাহরণ রয়েছে কি না; লিঙ্কের জন্য অনেক ধন্যবাদ! এটি সম্ভব, এখন অবগত হয়েও আমি সম্মত হই যে পরিবেশগত স্তরে এটি নির্ধারণ করা অবশ্যই আপনার পথনির্দেশক, উভয় কারণে আপনার প্রস্তাবিত কারণ এবং জেনেরিক সাইট কনফিগারেশনকে পরিবেশ-নির্দিষ্ট কনফিগারেশন থেকে ডেকে আনে সহায়তা করা।
ডেভিড ওয়াটসন

উত্তর:


11

হ্যাকিং কোরটি নিরবিচ্ছিন্ন হওয়ার জন্য দৃ strongly়ভাবে নিরুৎসাহিত করা হয়েছে কারণ এটি কার্যকরভাবে হাজার হাজারের সমর্থন সম্প্রদায়কে একটির সমর্থনকারী সম্প্রদায়কে হ্রাস করে (বা আপনার দলের আকার যাই হোক না কেন)। এই সর্বোত্তম অনুশীলন ব্যতিরেকে, দ্রুপলের সাথে নতুনদের সহায়তা করা প্রায় অসম্ভব হয়ে উঠবে। এটি সামঞ্জস্যতা এবং কিছু ক্ষেত্রে সুরক্ষাও বাধা দেয়।

এটি বলা হয়ে থাকে, হ্যাকিং কোরটি সর্বদা ততটা খারাপ নয় যতটা আমরা এটি তৈরি করতে চাই। কোরটি পরিবর্তন না করে আমাদের প্রেসফ্লো এবং বিতরণ মূলের মতো বিতরণ হবে না আকর্ষণীয় উপায়ে। আপনি ঠিক কী করছেন তা আপনি জানেন, আপনি আপনার বিতরণ দিয়ে আপনার প্যাচগুলি বিতরণ করছেন (এটি সম্ভবত এমনভাবে কার্যকর হয় যাতে আপনি আবার আপগ্রেড-পরবর্তী পোস্টের পরে তা প্রয়োগ করতে পারবেন) এবং আপনি বিশদ নথিপত্র রেখে চলেছেন তা কেবল গুরুত্বপূর্ণ আপনি কী পরিবর্তন করেছেন এবং কেন আপনি এটি পরিবর্তন করেছেন of

আপনার জিনিসগুলি কীভাবে কাঠামোগত করা হয়েছে তার উপর নির্ভর করে আপনি অবশ্যই উপরোক্ত পরিবর্তনটি করতে পারেন xmlrpc_request(), প্যাচ তৈরি করতে পারেন এবং তারপরে এটি প্রয়োগ করতে স্বয়ংক্রিয়ভাবে ড্রশ মেকের মতো কিছু ব্যবহার করতে পারেন (দ্রষ্টব্য যে দ্রাশ মেক 5.x রিলিজের জন্য নিজেই ড্রাশ প্রকল্পে চলেছে ), মেকফাইলে এবং অন্য কোথাও অতিরিক্ত ডকুমেন্টেশন সরবরাহের সময় পরিবর্তন কী করে এবং এটি প্রয়োজনীয় / কাঙ্ক্ষিত কেন।

মূল ফাংশনগুলিকে বাড়ানোর জন্য আর একটি সাধারণ প্যাটার্ন হ'ল একটি মোড়ক তৈরি করা যা কোনও মূল ফাংশনে একটি সামান্য বিট কার্যকারিতা যুক্ত করে এবং কোরের বাস্তবায়নের পরিবর্তে মোড়কটিকে কল করে। যখন সম্ভব হয়, এটি জিনিসগুলিকে অনেক বেশি মডিউল করে তোলে। নিম্নোক্ত বিবেচনা কর:

/**
 * Wrapper function for xmlrpc_request() to provide logging.
 */
function mymodule_xmlrpc_request($method, $args) {
  $xrr = xmlrpc_request($method, $args);
  watchdog('xmlrpc', $xrr->xml);
  return $xrr;
}

আবার, আপনি কী করছেন তার উপর নির্ভর করে সম্ভবত তা সম্ভব হয় নাও হতে পারে তবে এটি যখন আপনি নিজেকে মুছে ফেলা এবং নথিভুক্ত থাকেন তা নিশ্চিত করার চেষ্টা করার জন্য কয়েকটি মাথাব্যথা বাঁচিয়েছেন। যদিও এই ক্ষেত্রে, এর মতো একটি এক-ফাংশন মনে হয় এই জাতীয় একটি মোড়কের জন্য উপযুক্ত প্রার্থী। যদি আপনার বাস্তবায়নটি একটি মডিউলে বন্দী হয় তবে আপনি নিজের সম্পূর্ণ সমাধানের লগ স্তরটি নিয়ন্ত্রণ করতে, উত্পাদন সাইটগুলিতে এই কার্যকারিতাটি অক্ষম করে এমনকি এটিতে প্রসারিত করতে পারেন:

/**
 * Wrapper function for xmlrpc_request() to provide logging (if enabled).
 */
function mymodule_xmlrpc_request($method, $args) {
  $xrr = xmlrpc_request($method, $args);
  if (variable_get('mymodule_log_level', 0) > 0) {
    watchdog('xmlrpc', $xrr->xml);
  }
}

সংক্ষেপে, আপনি মডিউলগুলি দিয়ে কী করতে পারেন সর্বাধিক করতে চান (এবং আপনি অনেক কিছু করতে পারেন) তবে মূল পরিবর্তন করার জন্য বৈধ কারণ রয়েছে। এটি যত্ন সহকারে করা উচিত, এটাই সব।


9

আপনি যদি কাজটি পরিবর্তন করার প্রয়োজন হলে কোর বা contrib মডিউল উচিত।

  1. পরিবর্তনগুলি সহ একটি প্যাচ তৈরি করুন।
  2. ড্রাশ মেকের মতো একটি ডিপ্লোয় সিস্টেম ব্যবহার করুন যা আপনি কোর বা মডিউলগুলি আপডেট করার পরে প্যাচগুলি স্বয়ংক্রিয়ভাবে পুনরায় প্রয়োগ করবে।
  3. নথি দলিল নথি।

1
আমি সত্যই কল্পনার কোনও প্রসারিত করে কোর পরিবর্তনের একটি বৈধতা প্রত্যাশা করছিলাম না ... তাই এখন আমি একটি গৌণ প্রশ্নে যেতে বাধ্য হচ্ছি: একাকী স্ট্যান্ডার্ড মডিউলে একই জিনিস করা কি কোনও উপায়ে ভাল?
ওহকাবাকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.