পরিবর্তিত আকারে নতুন এবং সম্পাদনা নোডের মধ্যে পার্থক্য


24

আমার কাছে একটি নির্দিষ্ট সামগ্রীর ধরণের জন্য একটি পরিবর্তন বিভাগ রয়েছে। ফর্মের পরিবর্তনে আমি কীভাবে এটি জানতে পারি যে এটি নতুন ফর্ম তৈরি করছে বা ফর্ম সম্পাদনা করছে কিনা ?

অলটার থেকে ডিএসএম ($ ফর্ম) দিয়ে আমি তাদের মধ্যে বেশ কয়েকটি পার্থক্যের সাথে ফলাফল পেতে পারি। একে অপরের থেকে আলাদা করার সবচেয়ে ভাল উপায় কী?

এটা কি ভাল উপায়?

    if(isset($form['nid']['#value']))
     'means in edit form'
    else 
     'means in create new from'

উত্তর:


61

আপনি যদি নোড_বজেক্ট_প্রিয়ার () কোডটি নোড_ফর্ম () নোড সম্পাদনা / তৈরি ফর্মের জন্য ফর্ম নির্মাতা ) থেকে দেখে থাকেন তবে দেখতে পাবেন যে এতে নীচের কোড রয়েছে:

  // If this is a new node, fill in the default values.
  if (!isset($node->nid) || isset($node->is_new)) {
    foreach (array('status', 'promote', 'sticky') as $key) {
      // Multistep node forms might have filled in something already.
      if (!isset($node->$key)) {
        $node->$key = (int) in_array($key, $node_options);
      }
    }
    global $user;
    $node->uid = $user->uid;
    $node->created = REQUEST_TIME;
  }

Hook_for_BASE_FORM_ID_alter () এর একটি প্রয়োগে, নিম্নলিখিত কোডটির মতো কোড ব্যবহার করা যথেষ্ট।

function mymodule_form_node_form_alter(&$form, &$form_state) {
  $node = $form_state['node'];

  if (!isset($node->nid) || isset($node->is_new)) {
    // This is a new node.
  }
  else {
    // This is not a new node.
  }
}

যদি নোডটি নতুন হয়, তবে ফর্মটি নোড তৈরি করছে; যদি নোডটি নতুন না হয় তবে ফর্মটি একটি বিদ্যমান নোড সম্পাদনা করছে।

ড্রুপাল 8 এ, প্রতিটি শ্রেণি প্রয়োগকারী EntityInterface(যার মধ্যে Nodeশ্রেণি অন্তর্ভুক্ত ) EntityInterface::isNew()পদ্ধতিটি প্রয়োগ করে । কোনও নোড নতুন কিনা তা পরীক্ষা করা কল করার মতোই সহজ হয়ে যায় $node->isNew()। যেহেতু ড্রুপাল 8 এ $form_state['node']আর নেই, কোডটি নিম্নলিখিত হয়ে যায়:

function mymodule_form_node_form_alter(&$form, &$form_state) {
  $node = $form_state->getFormObject()->getEntity();

  if ($node->isNew()) {
    // This is a new node.
  }
  else {
    // This is not a new node.
  }
}

উভয় শর্তের প্রয়োজন কেন?
ডিজিটগোফার

কারণ এমন কোনও মডিউল থাকতে পারে যা নতুন নোডের জন্য নোড আইডি সেট করে, আমার ধারণা।
kiamlaluno

এটি সেট করা থাকলে রিটার্ন !empty($node->is_new)হিসাবে ব্যবহার করা ভাল । isset($node->is_new)TRUEFALSE
bloke_zero

@ ব্লোক_জারো আমি ড্রুপাল নিলাম এটি সেট হয়ে যাওয়ার আশা করে না FALSE। আসলে, যদি কিছু খারাপ মডিউল থাকে যা এটি সেট না করে FALSEপরিবর্তে সেট করে of
kiamlaluno


4
/**
 * Implementation of hook_form_alter().
 */
function MY_MODULE_form_alter(&$form, $form_state, $form_id) {
  if ($form['#node'] && $form['#node']->type .'_node_form' === $form_id) {
    // Is node form.

    if ($form['#node']->nid) {
      // Is node edit form.
    }
  }
}

1

ইন Drupal এর 8 আপনার প্রয়োজন হবে form_idপরিবর্তনশীল এবং এটি প্রতিটি ক্ষেত্রে উপর আলাদা হতে হবে এবং এটি অন্তর্ভুক্ত করা হবে _edit_এটা আমরা একটি নোড সম্পাদনা করছেন যদি

function MODULENAME_form_alter(&$form, &$form_state, $form_id) { 
    if($form_id == '"node_article_edit_form"'){
        //edit form
    }
    if($form_id == 'node_article_form') {
        //create form
    }
}

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