ড্রুপাল 7 এ এক্সপোজ ভিউ ফিল্টারগুলিতে হুক_ফরম_্যাল্টার ব্যবহার করা


12

hook_form_alter()ভিউ 3 এবং দ্রুপাল 7 এর সাহায্যে আমার কিছুটা সমস্যা হচ্ছে ।

আমি একটি ভিউ স্বতন্ত্রভাবে সনাক্ত করতে একটি বিবৃতি যোগ করতে অক্ষম; আমি যা কিছু রেখেছি, যদি বিবৃতিটি কখনও সত্য হয় না। তবে আমি সহজেই নীচেরগুলি ব্যবহার করে form_id ব্যবহার করতে পারি যাতে আমি কোথায় ভুল করছি তা নিশ্চিত নই!

if ($form_id == 'views_exposed_form') {
}

আমার hook_form_alter()একক দৃশ্যের অনন্যভাবে পরিবর্তন করতে আমি কীভাবে ব্যবহার করব ?

উত্তর:


25

আপনি অ্যাক্সেস দ্বারা hook_for_alter এর মধ্যে ভিউ অবজেক্টে অ্যাক্সেস পেতে পারেন $form_state['view']। এটি আপনাকে একটি নির্দিষ্ট দর্শন সনাক্ত করতে দেয়:

function mymodule_form_alter(&$form, &$form_state, $form_id) {
    if ($form_id == 'views_exposed_form') {
        $view = $form_state['view'];
        if ($view->name == 'my_view_machine_name' && $view->current_display == 'display_name') {
            // alter your exposed form here
        }
    }
}

এটি একটি আরও ভাল সমাধান যেহেতু $ ফর্ম_আইডি উন্মুক্ত ফর্মগুলির জন্য যথেষ্ট নয় (অন্য উত্তরগুলি কীভাবে জানায়), দুর্ভাগ্যক্রমে বর্তমান_ডিসপ্লে একই পাতায় জটিল সেটগুলির কয়েকটি পরিস্থিতি যথেষ্ট নয়
রোটারি রাদু

সম্মত - এটিই আরও লক্ষ্যযুক্ত সমাধান। আপনি যদি একাধিক দর্শন প্রকাশিত ফিল্টার ফর্মগুলি ব্যবহার করেন তবে খুব দরকারী Very
সেজে

Drupal_set_message ($ দর্শন-> নাম) ব্যবহার করুন; & drupal_set_message ($ দর্শন-> বর্তমান_ডিসপ্লে); আপনার নাম পেতে এটি "ভিউ_ডিইলস" বলে ভেবে আমি কিছুটা বিভ্রান্ত হয়ে পড়েছিলাম, তবে এটি আমার ক্ষেত্রে কেবল "ডিলস" ছিল।
কলিন্স

আমরা ড্রুপাল 8 একই জিনিসটি কীভাবে করতে পারি?
শারিক

এর mymodule_form_views_exposed_form_alter() পরিবর্তে ব্যবহার করা ভাল mymodule_form_alter, তারপরে আপনি চেকটি এড়িয়ে যেতে পারেন $form_id
বেরেন্ড দে বোয়ার

18

আমি যা করব তা হ'ল এটি এক ধাপ পিছনে নিয়ে যাওয়া এবং আপনি এমনকি এই হুকটি নিবন্ধিত করছেন কিনা তা দেখুন। প্রায়শই $form_idপরিবর্তন।

ডিবাগিং প্রক্রিয়া:

  • ডেভেল চালু করুন
  • আপনি যেমন D6 ব্যবহার করেন তখন আপনার হুকের ভিতরে dsm ($ form_id) .োকান
  • আপনার ক্যাশে সাফ করুন

Drupal.org থেকে কোড কোড (ভিতরে mymodule.moduleবা template.phpফাইল) :

<?php
/**
 * Implements hook_form_alter().
 */
function mymodule_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'form_views_exposed_form') {
    drupal_set_message("Form ID is : " . $form_id);
  }
}
?>

আপনি ফর্ম আইডির একগুচ্ছ মুদ্রিত দেখতে পাবেন তারপরে আপনার দৃষ্টিভঙ্গি ফর্ম হুকটি নির্বাচন করুন এবং সেখান থেকে কাজ করবেন।

এছাড়াও, ড্রুপাল 7 দিয়ে আপনি সরাসরি আইডি দ্বারা নির্দিষ্ট ফর্মগুলি লক্ষ্য করতে সক্ষম হবেন ।

উদাহরণ:

<?php
/**
 * Implements hook_form_alter().
 */
function mymodule_form_views_exposed_form_alter(&$form, &$form_state, $form_id) {
  drupal_set_message("Form ID is : " . $form_id);
}
?>

নোট করুন যে আপনি যদি একাধিক উদ্ভাসিত ফর্মগুলি ব্যবহার করেন তবে আপনি ফর্ম অলটার ফাংশনে $ ফর্ম ['# আইডি'] পরীক্ষা করে একটি নির্দিষ্ট দর্শন পরীক্ষা করতে পারবেন।

অবশেষে, যদি এটি কাজ না করে তবে আমি এই সমস্যাটির সারিটি পর্যালোচনা করার পরামর্শ দেব: এক্সপোজড ফিল্টারগুলিতে কীভাবে ফিল্টার পরিবর্তন করা যায় ফর্ম_াল্টার হুক


2

সাম্প্রতিককালে আমিও এই ইস্যুতে ঝাঁপিয়ে পড়েছি, তবে আমি কাস্টমটির পরিবর্তে বৈশিষ্ট্য মডিউলটি ব্যবহার করছি। এটি আমার সমস্যা সমাধানে সহায়তা করেছিল।

/**
 * Implements hook_views_api_alter()
 */
function MY_FEATURE_views_api_alter(&$vars) {
  if (isset($vars['MY_FEATURE'])) {
    $vars['MY_FEATURE']['path'] = drupal_get_path('module', 'MY_FEATURE');
  }
}

এবং তারপরে আপনি আপনার হুক_ফর্ম_ভিউ_ এক্সপোজড_ফর্ম_াল্টার () ব্যবহার করতে পারেন:

/**
 * Implements hook_form_views_exposed_form_alter().
 */
function MY_FEATURE_form_views_exposed_form_alter(&$form, &$form_state) {
  if($form['#id'] == 'views-exposed-form-search-products-page') {
    $form['price'] = array(
      '#type'    => 'select',
      '#size'    => NULL,
      '#options' => _getPriceOptions(),
    );
  }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.