ভাষাটির সাথে কাজ করার সময় সবচেয়ে ভাল অনুশীলন কী [আনড]?


51

আমি আমার মডিউলটিতে ডেটা অ্যাক্সেস করতে এই ফর্মটি ব্যবহার শুরু করছি। ( মন্তব্য # 1 দেখুন ।)

$node->field_test[$node->language][0]['value']

আমি ভেবেছিলাম যে একটি প্রশংসনীয় ভাল সমাধান মতো লাগছিল, কিন্তু আরো যে একই প্রশ্ন নিচে আমি দেখেছি এই :

অনুমান করবেন না যে 'আনড' ভাষা ব্যতীত সত্তার ক্ষেত্রের জন্য, এটি ক্ষেত্রগুলির জন্য যা অনুবাদযোগ্য নয় এবং সত্তা অনুবাদ মডিউল ছাড়া যা সমস্ত ক্ষেত্র। অধিকন্তু, দ্রুপালের বিভিন্ন 7.x সংস্করণের মধ্যে এর মধ্যে পার্থক্য রয়েছে। কোন ভাষা কোডের ডেটা সংরক্ষণ করা হয় তার অধীনে আপনার জন্য ফাংশনটি
সাজিয়ে field_get_items()ফাংশনটি ব্যবহার করা আরও ভাল ।

এবং এখন আমি জানি না আমি যা ব্যবহার করছি তা রাস্তায় কিছু ভেঙে দিতে পারে কিনা।

উত্তর:


39

আমি দেখতে পেয়েছি যে সত্তা এপিআই মডিউলটি ব্যবহার করা একটি দুর্দান্ত সহায়তা এবং কোডটিকে আরও পঠনযোগ্য করে তোলে। উপরের কোডটি সর্বদা কার্যকর হয় না, যেহেতু নোড এবং ক্ষেত্রের ভাষা পৃথক হতে পারে।

সত্তা API মডিউল এবং এর মোড়কের সাহায্যে আপনি নিম্নলিখিত কোডটি ব্যবহার করতে পারেন:

 $node_wrapper = entity_metadata_wrapper('node', $node);
 $field_val = $node_wrapper->field_test->value();

এটি বুলেট প্রুফ হওয়া উচিত। সত্তা মডিউলটি ব্যবহার করার একটি বিষয় হ'ল আপনি যদি এমন কোনও ক্ষেত্র অ্যাক্সেস করার চেষ্টা করেন যা অস্তিত্বহীন, আপনি একটি নোটিশ এবং ভুল আচরণের পরিবর্তে একটি বাজে ত্রুটি এবং একটি ব্যতিক্রম পাবেন।

এটি এড়ানোর জন্য, আপনি এইভাবে চেষ্টা / ধরতে পারেন

try {
  $field_val = $node_wrapper->field_doesnt_exist->value();
} catch (EntityMetadataWrapperException $e) {
  $field_val = 'default/fallback value';
}

অথবা আপনি ব্যবহার করতে পারেন isset()যা EntityMetadataWrapperঅভ্যন্তরীণভাবে হ্যান্ডলগুলি:

$field_val = 'default/fallback value';
if (isset($node_wrapper->field_doesnt_exist)) {
  $field_val = $node_wrapper->field_doesnt_exist->value();
}

এই ফাংশনটি entity_metadata_wrapper()হ্রাস করা হয়েছে? আমি এটি আমার মডিউলে কল করার চেষ্টা করেছি এবং পেয়েছি Fatal error: Call to undefined function entity_metadata_wrapper()- আমি ড্রিমউইভারে আমার ড্রুপাল 7.12 ইনস্টলেশনটিতে একটি উত্স অনুসন্ধানও করেছি, এবং কোডের অন্য কোথাও 0 ফলাফল নিয়ে এসেছি!
আদিত্য এমপি

1
আদিত্য - এটি সত্ত্বা এপিআই মডিউলে রয়েছে - মূল নয়।
lazysoundsismm

1
@ অ্যাডটিয়ামনন অলসভাবে বলেছেন যে এটি মূল বিষয় নয় ... তবুও এটি সম্ভবত দ্রুপাল ৮ এর পক্ষে হবে The সত্তার এপিআইগুলি অন্ততপক্ষে উন্নত হবে। ড্রুপাল 7 এর জন্য সত্তা সিস্টেমের জন্য প্রয়োজনীয় সমস্ত API তৈরি করার সময় আসলেই ছিল না, যাতে সত্তা API মডিউলটি অর্জন করার চেষ্টা করে।
googletorp

ধন্যবাদ আপনাকে বলছি, আমি উত্তরটি সঠিকভাবে না পড়তে এবং সত্তা এপিআই প্রকল্পের পৃষ্ঠার লিঙ্কটি অনুসরণ করতে বোকা ছিলাম :)
আদিত্য এমপি

1
যখন আমি সত্তা_মেডাটাটা_আরপারের উত্স কোডটি সন্ধান করি এবং আমাকে আরও সহজ ক্ষেত্রের হেরফের দেওয়ার জন্য তাত্ক্ষণিকভাবে এবং বর্ধিত সমস্ত শ্রেণীর মাধ্যমে খরগোশের ট্রেইল অনুসরণ করি, তখন আমি আশ্চর্য হয়েছি যে এটি সমস্ত মূল্যবান কিনা। আমার বুটস্ট্র্যাপে আরও 3 কে + লাইন কোড যুক্ত করা হচ্ছে এবং সমস্ত ভেরিয়েবল অ্যাসাইনমেন্টের সাথে মোকাবিলা করার জন্য আরও মেমোরি গ্রহণ করা ... আরও হালকা কিছু আছে কি? এটি কেবল মনে হয় এটি $node->field_name[LANGUAGE_NONE][0]['value'] = 'foo';সত্যই সবচেয়ে কার্যকর উপায়।
চার্লি শ্লিয়েসার

19

পড়ার জন্য, আপনার সর্বদা ফিল্ড_জেট_াইটেমস () ব্যবহার করতে সক্ষম হওয়া উচিত , যা আপনার জন্য সঠিক ভাষা বাছাই করবে এবং ক্ষেত্রটির কোনও মান আছে কিনা তাও পরীক্ষা করবে।

দুর্ভাগ্যক্রমে, ফিল্ড এপিআই 7.x খুব সীমিত, উদাহরণস্বরূপ প্রথম ক্ষেত্রের আইটেমটি পাওয়ার কোনও উপায় নেই, এমনকি একটি একক ফাংশন কল দিয়ে মান পাওয়ার বিষয়ে জিজ্ঞাসা করার সাহসও করবেন না ... এবং কোনও ফিল্ড_সেট_াইটেম নেই ( ) পাল্টা।

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


1
আপনি যা বলছেন তা থেকে আমি এই ধারণাটি পেয়েছি যে ড্রুপাল 8 এ এই ধরণের জিনিসটি আরও বাড়ানো যেতে পারে? যদি তাই হয় তবে কীভাবে এই ধরণের জিনিসগুলি কীভাবে প্রগতিশীল তা সন্ধান করতে যায়? মডিউল পৃষ্ঠাগুলি বাদে কি আমার কাছে গোলকধাঁধার মতো! :)
ক্লাইভ

1
ঠিক আছে, সবসময় আশা থাকে :) এবং দ্রুপাল ৮-এ কী চলছে তার উচ্চ স্তরের ওভারভিউ রাখাও শক্ত, একটি উপায় হ'ল উপায়গুলি অনুসরণ করা। যদিও এটি বিদ্যমান নির্দেশাবলীর সরাসরি টার্গেট নয়। সত্তা এপিআই মডিউলের অংশগুলি সরানো / কোরে সরানো হচ্ছে (এখন সত্তা শ্রেণি রয়েছে এবং বিদ্যমান সত্তাগুলি নতুন সিস্টেমে রূপান্তরিত হয়েছে)। সুতরাং এমন একটি সম্ভাবনা রয়েছে যা আমরা উদাহরণস্বরূপ ক্ষেত্রগুলির সাথে ডিল করার জন্য সেই ক্লাসগুলিতে সরাসরি পদ্ধতিগুলি পেয়ে যাব। প্রত্যাবর্তিত পরিবর্তনের জন্য, একটি ভাল সংস্থান হ'ল নতুন পরিবর্তন রেকর্ড সিস্টেম, দেখুন drupal.org/list-changes/drupal
বার্ডির

উজ্জ্বল, আমি ঠিক অনেক ধরণের ধন্যবাদ খুঁজছিলাম! :) আশা করি আপনি আমার জিজ্ঞাসা করতে আপত্তি করবেন না আমি জানলাম এটি সাইটের পক্ষে সত্যিকার অর্থে বিষয় নয় ... আমি মূল অবদানের সাথে জড়িত থাকতে চাই তবে কখনও কখনও উন্মুক্ত উত্সের সাথে জড়িত না হয়ে পুরো বিষয়টি আমি খুঁজে পাই কিছুটা ভয়ঙ্কর ... শুরু করার জন্য ভাল জায়গাটি চমৎকার লাগছে :)
ক্লাইভ

ক্লাইভ: drupalofficehours.org দেখুন - লোকদের অবদান দিয়ে শুরু করতে এটি অবশ্যই সহায়তা করে। সেখানে আরও সংস্থান আছে। আমি এমন একটি ব্যবহারকারী গ্রুপের মিটিংয়ে যাওয়ার পরামর্শও দেব যা কোর ডিভাস ঘন ঘন বা বেশি সম্ভবত একটি ড্রুপাল ক্যাম্প যেখানে কোর দেব বা দু'জন থাকবে। গ্রুপগুলি.ড্রপাল.অর্গ.এলগুলিতে আপনার স্থানীয় গোষ্ঠীটি সন্ধান করুন এবং আপনার এটি কার্যকর করতে সক্ষম হওয়া উচিত। drupical.org এছাড়াও দরকারী হতে পারে।
উইজোনসোলিউশনগুলি

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