আপনি যদি স্বতঃপূর্ব সীমাবদ্ধতার সমস্ত ওভাররাইড করে বেঁচে থাকতে পারেন তবে আপনি ড্রপাল 8 এ একটি মূল পরিষেবা ওভাররাইড করতে পারেন ;
আপনার যে পরিষেবাটি ওভাররাইড করতে হবে তা এখানে ਕੋਰ.সার্ভিসেস.আইএমএলে রয়েছে:
entity.autocomplete_matcher:
class: Drupal\Core\Entity\EntityAutocompleteMatcher
arguments: ['@plugin.manager.entity_reference_selection']
আপনার কাস্টম মডিউলে, একটি শ্রেণি যুক্ত করুন যা সার্ভিসমিডিফায়ার ইন্টারফেস প্রয়োগ করে
namespace Drupal\mymodule;
use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\DependencyInjection\ServiceModifierInterface;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;
class MyModuleServiceProvider implements ServiceModifierInterface {
/**
* Modifies existing service definitions.
*
* @param ContainerBuilder $container
* The ContainerBuilder whose service definitions can be altered.
*/
public function alter(ContainerBuilder $container) {
for ($id = 'entity.autocomplete_matcher'; $container->hasAlias($id); $id = (string) $container->getAlias($id));
$definition = $container->getDefinition($id);
$definition->setClass('Drupal\mymodule\Entity\EntityAutocompleteMatcherCustom');
$container->setDefinition($id, $definition);
}
}
তারপরে আপনার মডিউলে /src/Entity/EntityAutocompleteMatcherCustom.php এ সত্ত্বাআউটোকম্পলিউম্যাটচার.এফপি অনুলিপি করুন
তারপরে হার্ডকডযুক্ত 10 থেকে 50 তে আপডেট করুন বা আপনি যে সীমাটি চান তা আপডেট করুন:
namespace Drupal\mymodule\Entity;
use Drupal\Component\Utility\Html;
use Drupal\Component\Utility\Tags;
use Drupal\Core\Entity\EntityReferenceSelection\SelectionPluginManagerInterface;
use Drupal\Core\Entity\EntityAutocompleteMatcher;
/**
* Matcher class to get autocompletion results for entity reference.
*/
class EntityAutocompleteMatcherCustom extends EntityAutocompleteMatcher {
/*
* {@inheritdoc]
*/
public function getMatches($target_type, $selection_handler, $selection_settings, $string = '') {
$matches = array();
$options = array(
'target_type' => $target_type,
'handler' => $selection_handler,
'handler_settings' => $selection_settings,
);
$handler = $this->selectionManager->getInstance($options);
if (isset($string)) {
// Get an array of matching entities.
$match_operator = !empty($selection_settings['match_operator']) ? $selection_settings['match_operator'] : 'CONTAINS';
// Changing limit from 10 to 50.
$entity_labels = $handler->getReferenceableEntities($string, $match_operator, 50);
// Loop through the entities and convert them into autocomplete output.
foreach ($entity_labels as $values) {
foreach ($values as $entity_id => $label) {
$key = "$label ($entity_id)";
// Strip things like starting/trailing white spaces, line breaks and
// tags.
$key = preg_replace('/\s\s+/', ' ', str_replace("\n", '', trim(Html::decodeEntities(strip_tags($key)))));
// Names containing commas or quotes must be wrapped in quotes.
$key = Tags::encode($key);
$matches[] = array('value' => $key, 'label' => $label);
}
}
}
return $matches;
}
}
স্পষ্টতই ওভাররাইড মূল পরিষেবাগুলির কিছু ঝুঁকি রয়েছে তবে আপনি এটি করতে পারেন এটি দুর্দান্ত।
মূল পরিষেবাকে ওভাররাইড করার ঝুঁকিগুলি কী কী?
1) আপনি कोर আপডেট করার সময় আপনি আপডেটের সুবিধা হারাতে পারেন। যদি পরিষেবায় একটি গুরুতর সুরক্ষা সংশোধন করা হয়, এবং আপনার পরিবর্তিত অনুলিপিটিতে সুরক্ষা গর্ত রয়েছে, আপনি সেই কোডটি আপডেট করে সম্প্রদায়টি থেকে কোনও উপকার পাবেন না।
2) আপনি ইনস্টল করা অন্যান্য মডিউলগুলির মূল বৈশিষ্ট্যের সেটের সাথে মূল পরিষেবার সাথে নির্ভরতা থাকতে পারে। সুতরাং আসুন বলি যে অন্য মডিউলে এমন কিছু কোড রয়েছে যা ভঙ্গ হয়ে যাবে যদি স্ব-পরিপূরণ এন্ট্রিগুলির সংখ্যা 10 এর চেয়ে বেশি বা কম হয় তবে আপনি এটি সম্পর্কে জানতে পারবেন না যতক্ষণ না এটি আপনাকে প্রভাবিত করে।
3) এটি আপনার কোডবেস বজায় রাখা আরও শক্ত করে তোলে। আপনাকে মনে রাখতে হবে যে আপনি মূল দ্রুপাল ব্যবহার করছেন না, তবে একটি বর্ধিত সংস্করণ। আপনার বিকাশের পরে আপনার প্রকল্পে যোগ দেওয়া অন্যান্য বিকাশকারীদের কোনও পরিষেবা কেন মান-মানহীন আচরণ করছে তা নির্ধারণ করতে বেশ সময় থাকতে পারে time
এই হ্যাকিং কোর?
তুমি কিভাবে এটি দেখ তার উপর নির্ভর করে। এটি মূল মডিউল এবং কোড পরিবর্তন করে না। এটি কোনও প্যাচ তৈরি করে না এবং এটি প্রয়োগ করে এবং সুরকারের মতো প্যাকেজ ম্যানেজারের সাথে এটি ট্র্যাকও করে না। এটি আরও বেশি ওয়ান-অফ কাস্টমাইজেশন যা কোনও সাইটের মূল আচরণকে পরিবর্তিত করে, একটি আল্টর হুকের সাথে সমান। এটি আরও স্বয়ংসম্পূর্ণ যা একটি কোর হ্যাক, কারণ এটি আপনার সাইটে আপনার নিজস্ব কাস্টম মডিউলের মধ্যে। সুতরাং আসল পরিষেবাদির মূল আপডেটগুলি প্রভাবিত হবে না, ঠিক একইভাবে যেমন আপনি মূল পরিষেবা কোডটি প্যাচ করেছেন বা হ্যাক করেছেন।
তবে এতে হ্যাকিং কোরের মতো কিছু ঝুঁকি রয়েছে যা উপরে উল্লিখিত রয়েছে।
মূল প্রশ্নে, সমস্যাটি নোড শিরোনাম যথেষ্ট অনন্য নয়। ড্রপ ডাউনগুলিতে বিশ্বব্যাপী সীমা পরিবর্তন করা ছাড়া আরও ভাল সমাধান হ'ল স্বতন্ত্রতা সমস্যাটি সমাধান করা।
আমার পরামর্শটি হ'ল নতুন ক্ষেত্রের ফিল্ড_ডিসপ্লে_ টাইটেল যুক্ত করা এবং সেই পৃষ্ঠাটিতে ব্যবহার করা এবং যদি আপনার প্রয়োজন হয় তবে তালিকা পৃষ্ঠাগুলিতে যেখানে আপনার একটি সংক্ষিপ্ত শিরোনাম প্রয়োজন সেখানে ফিল্ড_টিজার_শ عنوان প্রয়োজন it তারপরে প্রকৃত শিরোনাম যা সত্তা রেফারেন্স নির্বাচন ড্রপডাউনটিতে টানা থাকে তা আপনার সম্পাদকদের জন্য দরকারী এবং অনন্য হতে পারে, যেমন "আমার নিবন্ধ (পৃষ্ঠা 1)" যদি সমস্যা হয় প্রতিটি পৃষ্ঠার একই শিরোনাম থাকে। তারপরে আপনাকে কোনও মূল পরিষেবা ওভাররাইড করতে হবে না।
আপনি যখন দ্রুপালকে নিয়ে কোনও সমস্যার মুখোমুখি হন, কমপক্ষে কাস্টম কোডের প্রয়োজনীয় সমাধানটি সন্ধান করার চেষ্টা করুন। এটি আপনার সাইটকে আরও স্থিতিশীল করে তোলে, বজায় রাখা সহজ এবং আপনার সময় সাশ্রয় করে।