ক্ষেত্র-প্রকারের তালিকা কীভাবে পাবেন?


10

আমি ড্রুপাল from থেকে দ্রুপাল ৮ পর্যন্ত একটি মডিউল পোর্ট করছি this এই মডিউলটির কনফিগারেশন সেটিংসে আমার বর্তমানে বিদ্যমান ক্ষেত্রের ধরণের তালিকা পেতে হবে।

ড্রুপাল 7-এ, field_info_field_types()ফাংশনটি ব্যবহার করে এটি অর্জন করা হয়েছিল ।

ড্রুপাল 8 (8.0.0-rc3) এ, আমি একটি ত্রুটি পেয়েছি "ফাংশনটির অস্তিত্ব নেই", যদিও একটি দ্রুপাল এপিআই রেফারেন্স সহায়তা পৃষ্ঠার দ্বারা বর্ণিত তথ্য সত্ত্বেও পরিষ্কার হয়ে গেছে।

তারপরে তদন্ত করে আমি একটি দ্রুপালকন্ট্রিব পৃষ্ঠা পেয়েছি , যেখানে ফাংশনটি অবহেলিত হিসাবে ঘোষণা করা হয়েছে এবং এখন ব্যবহারের প্রস্তাব দিচ্ছিDrupal::service('plugin.manager.entity.field.field_type')->getDefinitions()

তবে এটি ব্যবহার করে আরেকটি ত্রুটি "অজানা পরিষেবা প্লাগইন.ম্যানেজ.আর্টিটি.ফিল্ডিল্ডফিল্ড টাইপ" জ্বলে ওঠে, সৌভাগ্যবশত "আপনার মানে প্লাগইন.ম্যানেজ.আর.ফিল্ড.ফিল্ড টাইপ?"

সুতরাং আমি ব্যবহার Drupal::service('plugin.manager.field.field_type')->getDefinitions()এবং বাহ করার চেষ্টা করেছি : আমি ক্ষেত্রের ধরণের প্রত্যাশিত অ্যারে পেয়েছি।

তবে প্রতিটি অ্যারে সদস্য (একটি ফিল্ড-টাইপ) এখন একটি অবজেক্ট (চাইল্ড অ্যারের পরিবর্তে) এবং আমি যে ডেটাটি খুঁজছি তা সুরক্ষিত বৈশিষ্ট্যের মধ্যে নেস্টেড, তাই আমি এগুলি অ্যাক্সেস করতে পারি না।

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


এটি আরও ভাল আপনি api.drupal.org দেখুন, যা আরও আপডেট। আসলে, ফাংশনটির জন্য কোনও পৃষ্ঠা নেই
কিমলালুনো

"Api.drupal.org দেখুন" টিপটির জন্য ধন্যবাদ। অন্যদিকে (এবং এটি বরং মেটা প্রাসঙ্গিক, দুঃখিত) আমি যদি সহজেই বুঝতে পারি যে আপনি আমার সংক্ষিপ্তসারগুলি সম্পাদন করেছেন (ডি 7 -> দ্রুপাল 7), আমি ভাবছি আপনি কেন শিরোনামে "দ্রুপাল 8" বাদ দিয়েছেন? আমি ভাবার প্রবণতা পোষণ করি যে এখানে কিছু নিয়ম আছে যা বলেছিল যে এটি "8" ট্যাগের সাথে বেপরোয়া। তবে পাঠক হিসাবে আমি আমাকে ট্যাগের চেয়ে শিরোনামে আরও অনেক বেশি অবহিত করে দেখতে পেয়েছি: আমার দৃষ্টিতে, ট্যাগগুলি মূলত অনুসন্ধানের প্রক্রিয়াটিকে সম্বোধন করে, ক্রমান্বয়ে পড়ার সময় আমি খুব কমই তাদের দিকে মনোযোগ দিই।
সিফ্রিড

শিরোনামে ট্যাগগুলি পুনরাবৃত্তি করার দরকার নেই, কারণ যেখানেই কোনও প্রশ্ন তালিকাবদ্ধ থাকে সেগুলি সর্বদা দৃশ্যমান। স্ট্যাক এক্সচেঞ্জ ব্যবহারকারীরা ট্যাগগুলিতে মনোযোগ দিন।
কিমলালুনো

উত্তর:


16

প্রথম স্তরটি একটি অ্যারে। কীগুলি হ'ল প্লাগইন আইডি। আপনি তাদের তালিকা করতে পারেন:

$defs = Drupal::service('plugin.manager.field.field_type')->getDefinitions();
foreach ( $defs as $key => $value ) {
   echo $key, "\n";
}

এটি ফলাফল:

comment
datetime
file
image
link
list_string
list_float
list_integer
path
text_with_summary
text
text_long
email
boolean
created
changed
timestamp
string_long
language
decimal
uri
float
password
string
integer
entity_reference
uuid
map
taxonomy_term_reference

আপনি একটি বাছাই করতে পারেন এবং প্লাগইন সংজ্ঞা ডাম্প করতে পারেন।

var_dump($defs['comment']);

আপনি যদি কোনও বিশেষ অবজেক্টে আগ্রহী হন তবে আপনি api.drupal.org এর সাহায্যে আরও গভীর খনন করতে পারেন। তবে আপনি যদি মূল ডিরেক্টরিতে প্লাগইন অনুসন্ধান করেন তবে এটি আরও সহজ হবে।

কোনও বস্তু অ্যাক্সেস করতে, এটি var_dump এ সনাক্ত করুন এবং একটি পদ্ধতি ব্যবহার করুন:

$defs['comment']['description']->render();

এই ক্ষেত্রে এটি অবজেক্ট ট্রান্সলেটেবলমার্কআপ , যা অনুবাদকৃত স্ট্রিং অ্যাক্সেস করার পদ্ধতি রেন্ডার করে।


ধন্যবাদ তবে এটি আমি ইতিমধ্যে করেছি। এর বাইরেও, আমার সমস্যাটি রয়ে গেছে: আমি কীভাবে এই বস্তুর অভ্যন্তরের ডেটাটিকে প্রোগ্রামাগুলি অ্যাক্সেস করতে পারি ?
সিফ্রিড

ক্ষেত্রের সংজ্ঞাগুলিতে আপনি কী সন্ধান করতে চান? সাধারণভাবে আপনি এপিআই-তে কোনও সামগ্রীর বৈশিষ্ট্য এবং পদ্ধতিগুলি সন্ধান করেন এবং তারপরে আপনি তাদের `-> 'দিয়ে অ্যাক্সেস করতে পারেন। ক্ষেত্র সংজ্ঞা উত্স সন্ধান করা সহজ।
কে 4

আমি বের করে label, descriptionএবং moduleতাদের একটি কনফিগারেশন আকারে প্রদর্শন করে যেখানে, ব্যবহারকারী, যার জন্য এটা আমার মডিউল (চায় বেশী পরীক্ষা করতে পারবেন এমএমএস ) ক্লোন সংশ্লিষ্ট ক্ষেত্রের জন্য টোকেন তৈরি করে।
সিফ্রিড

আমি একটি উদাহরণ যোগ করুন।
4k4

ওহো! আমি আপনার শেষ মন্তব্যটি দেখেছি, কিন্তু আপনার সম্পাদনাটি লক্ষ্য করি নি, তাই আমি অপেক্ষা করতে থাকলাম। আমি আপনার পরামর্শ চেষ্টা করবে। ধন্যবাদ।
সিফ্রিড

4

টি () এর মধ্য দিয়ে যাওয়া প্রতিটি স্ট্রিং এখন একটি বস্তু। আপনি সেগুলি হিসাবে স্ট্রিং হিসাবে অ্যাক্সেস করতে পারেন, আসলে, আপনার এটি করা উচিত।

খুব অল্প কিছু ব্যতিক্রম রয়েছে যেখানে আপনি যেমন যেমন ঠিক তেমন কোনও বস্তু ব্যবহার করতে পারবেন না, উদাহরণস্বরূপ অ্যারে কীগুলি, তাদের জন্য আপনার এগুলি স্ট্রিংয়ে ফেলে দিতে হবে। অন্য যে কোনও কিছুই কাজ করা উচিত।

PS: অফিসিয়াল এপিআই ডকুমেন্টেশনটি হ'ল http://api.drupal.org/api/drupal/8 । কোর জন্য যে ব্যবহার করুন।

আর একটি ভাল উত্স হ'ল রেকর্ড পরিবর্তন: https://www.drupal.org/list-changes/pubmitted?keywords_description=field_info_field_tyype&to_branch=&version=&Created_op=%3E%3D&created%5Bvalue%5D=&Created%5Bma%%5D&xreated 5D =

সম্পাদনা: আপনার মন্তব্যের জবাবে, আপনি কী বোঝাতে চেয়েছেন তা আমি পুরোপুরি বুঝতে পারি না। আপনার প্রয়োজনীয় সমস্ত তথ্য ঠিক সেখানে রয়েছে, কেবল এটি ব্যবহার করুন।

$definitions = Drupal::service('plugin.manager.field.field_type')->getDefinitions();
foreach ( $definitions as $field_type => $definition) {
  print $definition['label'];
  print $definition['description'];
  print $definition['provider'];
}

আবার, কেবল সেই লেবেল / বিবরণটি অবজেক্ট are তাদের __toString () পদ্ধতি রয়েছে যা আপনি যখন মুদ্রণ / ব্যবহার করেন সেগুলি স্বয়ংক্রিয়ভাবে বলা হয়।


এই উত্তরের জন্য ধন্যবাদ। আপনার শেষ প্রস্তাবিত লিঙ্কটি খুব আশাব্যঞ্জক দেখাচ্ছে এবং আমি এই তথ্যের ভিত্তিতে তদন্ত করব। সংক্ষেপে বলেন, আমি ভুল বলছি যদি আমি আমার প্রয়োজনের জন্য অনুমান যে (নির্যাস label, description, moduleপ্রতিটি ক্ষেত্রের-টাইপ এর স্ট্রিং) আমি উচিত: 1) থেকে তালিকা পাওয়ার Drupal::service('plugin.manager.field.field_type')->getDefinitions()ইতিমধ্যে সম্পন্ন মত; 2) তারপরে একটি নির্দিষ্ট শ্রেণীর প্রার্থনা করার জন্য প্রত্যাহার করা অ্যারের প্রতিটি (কী ক্ষেত্রের নামের নাম) ব্যবহার করুন (কোনটি খুঁজে বের করুন এবং কোথায়, আমাকে আরও গভীরভাবে পরীক্ষা করতে হবে) যা প্রয়োজনীয় ইনফোগুলি পাওয়ার পদ্ধতি সরবরাহ করবে? এই নির্ভুলতার জন্য টিআইএ
সিফ্রিড

আমার উত্তর আপডেট।
বারদির

উফফফফ ... বুঝতে পারছি না! আপনি আপনার সম্পাদনায় যা প্রস্তাব করেছিলেন তা হ'ল আমি ডি 7-এ যা করেছি। এবং এটি ডি 8 তে কাজ করে না, যেহেতু ডি 8 $definition-এ স্ট্রিংগুলির একটি অ্যারে নয়, তবে বস্তুর একটি অ্যারে! আমি তাদের পরীক্ষা করার dpm () ব্যবহার করা হয়, এবং বুঝতে পারল যে প্রয়োজন স্ট্রিং প্রতিটি এই ভাবে নেস্টেড দেখা যাবে: 'label' => array(..., 'label' => Drupal\Core\StringTranslation\TranslatableMarkup Object {..., string, ...}, ...)। আমি কি স্পষ্ট কিছু মিস করছি?
সিফ্রিড

সবেমাত্র আবিষ্কার হয়েছে (ইদানীং) 4k4 এর শেষ সম্পাদনা, যা কাজ করে। আসলে আমার কাছে বিষয়টি ছিল TranslatableMarkupক্লাসটি কোথায় পাওয়া যায় তা এবং render()পদ্ধতিটির সহজলভ্যতা , . অবশেষে আমার ডেটা পাওয়ার সঠিক উপায় হ'ল print $definition['label']->render();। তবুও, আপনার অন্যান্য তথ্যের জন্য ধন্যবাদ।
সিফ্রিড

না, আবার, আপনি কি না প্রয়োজন -> রেন্ডার ()। $ সংজ্ঞা ['লেবেল'] ব্যবহার করুন, এটি ঠিক কাজ করে, আমার উপর আস্থা রাখ :)
বার্ডির

1

@ বারডির উত্তরের জন্য আপডেট সংস্করণ। শেল ব্যবহার করুন।

$definitions = Drupal::service('plugin.manager.field.field_type')->getDefinitions();
foreach ( $definitions as $field_type => $definition) {
  print 'Label: '. $definition['label']. PHP_EOL;
  print 'Machine name: '. $field_type. PHP_EOL;
  print 'Descritpion: '. $definition['description']. PHP_EOL;
  print 'Provider: '. $definition['provider']. PHP_EOL . ' ---' . PHP_EOL;
}

আউটপুট এখানে: https://gist.github.com/sobi3ch/70635cc62defff606242


1

গুগল এগুলি অনুসন্ধান করার সময় এই প্রশ্নটি খুঁজে পেতে পারে

আপনি যদি ড্রুপাল কনসোল ব্যবহার করেন তবে আপনি এটি ব্যবহার করতে পারেন:

drupal plugin:debug field.field_type

দ্রুপাল.আর.জে এটিও রয়েছে যা সহায়তা করতে পারে:

বিষয়বস্তু সত্তা ক্ষেত্রের সংজ্ঞা নির্ধারণ এবং ব্যবহার করা using

যদিও এটি ব্যবহারের উপযুক্ত উদাহরণগুলি খুঁজে পাওয়া যায় না

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.