হুক_ফর্ম_ল্টার ব্যবহার করে কীভাবে ক্ষেত্রকে পঠনযোগ্যভাবে তৈরি করা যায়


12

আমি কয়েকটি ড্রুপাল প্রোফাইল ফর্ম ফিল্ডকে কেবল সম্পাদনা মোডে কেবল পঠন হিসাবে তৈরি করার চেষ্টা করছি। আমি নীচের কোডটি হুক_ল্টারে ব্যবহার করছি

$form[field_organisation_company_name][und][0]['#after_build'][]='_build_element_readonly';

function _build_element_readonly($element, &$form_state) {  
    $element['value']['#attributes']['readonly'] = 'readonly';
    return $element;
}

ইউআই-তে দায়ের করা কেবল পঠনযোগ্য হিসাবে প্রদর্শিত হচ্ছে তবে তবুও, আমি ফায়ারব্যাগ ব্যবহার করে মানটি পরিবর্তন করতে পারি এবং সংরক্ষণ করতে পারি। এই আচরণ রোধ করার কোনও উপায় আছে কি?

উত্তর:


6

মনে হচ্ছে আপনার ক্ষেত্রের অনুমতিগুলির সাথে আপনার যা প্রয়োজন তা পূরণ করতে পারেন । ক্ষেত্রের মাধ্যমে ক্ষেত্রের ভিত্তিতে আপনি এতে অনুমতি সেট করতে পারেন:

  • ক্ষেত্রের জন্য নিজস্ব মান তৈরি করুন
  • ক্ষেত্রের জন্য নিজস্ব মান সম্পাদনা করুন
  • ক্ষেত্রের জন্য কারও মান সম্পাদনা করুন
  • ক্ষেত্রের জন্য নিজস্ব মান দেখুন
  • ক্ষেত্রটির জন্য কারও মান দেখুন

সুতরাং আপনি সহজেই আপনার ব্যবহারকারীদের শুরুতে ক্ষেত্রটির জন্য মান তৈরি করতে অনুমতি দিতে সক্ষম হবেন, তবে যত তাড়াতাড়ি তারা এগুলি কেবল একজন প্রশাসকের দ্বারা সম্পাদনযোগ্য হয়ে যায়।


+1 টি। ওপি অ্যাডমিনদের মান সম্পাদনা করার অনুমতি দিতে চাইলে field_permissionsনোংরা পথে কাজ করার চেয়ে সহজ হবে।
আইশক

হ্যাঁ, এটি আমার চেয়ে অনেক ভাল উত্তর :)
আলফ্রেড আর্মস্ট্রং

6

আপনি যখন ক্ষেত্রটি হিসাবে সেট করেন readonly, ব্রাউজারটি ক্ষেত্রটি লক করে জমা দেওয়ার পরে সার্ভারে ডেটা ফেরত পাঠায় । অন্যান্য বৈশিষ্ট্যটি হ'ল disabledক্ষেত্রটি লক করে সার্ভারে ডেটা ফেরত পাঠায় না

উভয় ক্ষেত্রে, আপনি জোর করে জমা দেওয়ার পরে মানটি একই হিসাবে সেট করতে পারেন। সুতরাং, এমনকি ক্ষেত্র সেট যখন হয় readonlyবা disabled, এবং ব্যবহারকারী এইচটিএমএল পরিবর্তিত এবং বিভিন্ন ডেটা পাঠায়নি, $form_state['values']অপরিবর্তিত থাকবে।

function _build_element_readonly($element, &$form_state) {  
    $element['value']['#attributes']['readonly'] = 'readonly';
    $element['value']['#value'] = isset($element['value']['#default_value']) 
       ?  $element['value']['#default_value']
       :  ''; 
    return $element;
}

নোট করুন যে আমরা # পূর্বনির্ধারিত_মূল্য #value থেকে সেট করেছি। ফর্মটি তৈরি হওয়ার সময় লোড হয়ে যাওয়া ডিফল্ট মান সেট করার স্বাভাবিক উপায় হল # ডিফল্ট_ভ্যালু এবং এতে ডিফল্ট_মূল্য $form_state['values']বা ব্যবহারকারী-ইনপুট থাকবে। আপনি যখন #valueস্পষ্টভাবে সেট করেন , ব্যবহারকারী-ইনপুট উপেক্ষা করা হয় এবং #valueব্যবহৃত হবে।

যাইহোক, আমি '#access' => FALSE,ফর্ম উপাদান গোপন করার সময় ব্যবহার করার পরামর্শ দেব । এটি আপনাকে এর মানগুলি ব্যবহার করার অনুমতি দেওয়ার সময় উপাদানটিকে পুরোপুরি সরিয়ে ফেলবে।


1

আপনি ফায়ারব্যাগকে কেবল পঠনযোগ্য ক্ষেত্রগুলি পরিবর্তন থেকে আটকাতে পারবেন না। তবে যদি পাঠ্যক্ষেত্রটি কেবলমাত্র পঠনযোগ্য হয় তবে কেবলমাত্র এটি ডেটা প্রদর্শন করা purpose তাহলে কোনও পাঠ্য-উপাদানটির বিপরীতে ইনপুট-উপাদানটি পরিবর্তন করবেন না কেন?

পরিবর্তে আপনি "অক্ষম" বৈশিষ্ট্যটি ব্যবহার করতে পারেন, কারণ অক্ষম ইনপুট-ফিল্ডগুলি সার্ভারে প্রেরণ করা হচ্ছে না।

আপনি ফায়ারব্যাগের সাথে "অক্ষম" বৈশিষ্ট্যটিও মুছে ফেলতে পারেন, তবে ডিসপাল কোর অক্ষম ইনপুট ক্ষেত্রগুলির পরিবর্তনের ক্ষেত্রে প্রতিক্রিয়া দেখায় না!


সহায়তার জন্য লরিডাহোস্টারকে ধন্যবাদ। আমার প্রয়োজনীয়তা হ'ল রেজিস্ট্রেশনের সময় ব্যবহারকারীর দ্বারা পূর্ণ কিছু ক্ষেত্র লক করার মতো। প্রোফাইল সম্পাদনা মোডে থাকা অবস্থায় এই তথ্যটি ব্যবহারকারীর কাছে প্রদর্শন করতে চান তবে ব্যবহারকারীকে এই ক্ষেত্রটি আপডেট করতে বাধা দিতে চান। কেবলমাত্র সুপার ব্যবহারকারী এই ক্ষেত্রগুলি সম্পাদনা করতে পারবেন
জয়েশ জোসে

1

এটি করার সবচেয়ে নিরাপদ উপায় হল 'আইটেম' হওয়ার ক্ষেত্রের ধরণটি পরিবর্তন করা। http://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7#item


# অক্ষম বৈশিষ্ট্যটি ব্যবহার করে আমি সমস্যাটি সমাধান করি। আমার ক্ষেত্রে কেবলমাত্র কিছু ব্যবহারকারী ক্ষেত্রটি সম্পাদনা করতে পারে, যেখানে অন্যরা কেবল ক্ষেত্রটি দেখতে পারে। আমি ব্যবহারকারীর ভূমিকার উপর ভিত্তি করে একটি যুক্তি লিখেছিলাম এবং সমস্যার সমাধান করেছি। আপনাকে সকলকে ধন্যবাদ
জয়েশ জোসে

1

আপনি ক্ষেত্রের অনুমতি + ফিল্ড পঠনযোগ্য ব্যবহার করতে পারেন ।

ক্ষেত্রের অনুমতি আপনাকে কিছু ক্ষেত্র নির্দিষ্ট ব্যবহারকারীদের জন্য অ-অ্যাক্সেসযোগ্য করে তুলবে।

ফিল্ড রিডোনলি আপনাকে অ্যাক্সেসযোগ্য ক্ষেত্রগুলি সম্পাদনা ফর্মগুলিতে (কেবল সেগুলি লুকিয়ে রাখার পরিবর্তে) কেবল পঠনযোগ্য আইটেম হিসাবে প্রদর্শন করতে দেয়।


1

আমি মনে করি #disabled = true;ব্যবহারটি আপনার মূলটিতে কিছু ভারী মডিউল যুক্ত করার পরিবর্তে এটি অর্জনের সবচেয়ে সহজতম উপায়, উদাহরণ হিসাবে আমি ব্যবহারকারী_প্রফাইলে_ফর্মটিতে কাস্টম চিত্র ক্ষেত্রের সম্পাদনাটি যখন ব্যবহারকারীর দ্বারা পূরণ করা হয় তখন অক্ষম করে।

function MY_CUSTOM_MODULE_form_alter(&$form, $form_state, $form_id){

        if($form_id == 'user_profile_form'){
            if($form['field_national_front']['und'][0]['#default_value']['fid']){
                $form['field_national_front']['und']['#disabled'] = true;
             }
          //ym($form);
        }
}

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

    function MY_CUSTOM_MODULE_form_alter(&$form, $form_state, $form_id){
       global $user;
       if($form_id == 'user_profile_form'){
           if($form['field_national_front']['und'][0]['#default_value']['fid'] && !in_array('webadmin', $user->roles)){
              $form['field_national_front']['und']['#disabled'] = true;
         }
//ym($form);
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.