প্রোগ্রামযুক্তভাবে একটি কাস্টম মডিউলে ফাইল ক্ষেত্রের সাথে একটি সামগ্রী প্রকার তৈরি করা


9

আমি একটি কাস্টম মডিউল লিখছি, যা আমি এর আগে করেছি, তবে আমি প্রথমবারের মতো ক্ষেত্রগুলি দিয়ে একটি সামগ্রীর প্রকার তৈরির চেষ্টা করেছি। আমি hook_node_info প্রয়োগ করেছি এবং অ্যাডমিন_মেনু থেকে ড্রপডাউন বিষয়বস্তুর ধরণের তালিকায় কন্টেন্টের ধরণটি প্রদর্শিত হচ্ছে, তবে আমি যখন admin/structure/typesএটি ব্রাউজ করি তখন তালিকাভুক্ত হয় না।

আমি হুক_ইনস্টল প্রয়োগ করেছি এবং অন্য একটি এসও প্রশ্নের সাথে পাওয়া কিছু কোড পেয়েছি code আমার কোডটি আমার ত্রুটি লগের জন্য কিছু ডিবাগ তথ্য প্রিন্ট আউট করেছে এবং এটি দেখতে সমস্ত কাজ পছন্দ করে তবে আমি স্ট্রাকচার সামগ্রীর প্রকারে ব্রাউজ করলে এটি যুক্ত করা ক্ষেত্রটি প্রদর্শন করে না।

এখানে হুক আছে:

function mymod_node_info() {
  return array(
    'mymod_content' => array(
      'name' => t('My Mod'),
      'base' => 'mymod_content',
      'description' => t('A Description'),
    )
  );
}

function mymod_install() {
    error_log('mymod_install');
    $types = node_type_get_types();

    if ( ! field_info_field('field_mymod_myfile') ) {
        $field = array(
            'field_name' => 'field_mymod_myfile',
            'type' => 'file',
        );
        $created_field = field_create_field($field);
        error_log('---- field_create_field -----');
        error_log(var_export($created_field, true));
    }

    $instance = array(
        'field_name' => 'field_mymod_myfile',
        'entity_type' => 'mymod_content',
        'bundle' => 'mymod_content',
        'required' => TRUE,
    );
    $created_instance = field_create_instance($instance);
    error_log('---- field_create_instance -----');
    error_log(var_export($created_instance, true));
}

আমি field_data_field_mymod_myfileডাটাবেসে ডাকা একটি টেবিল দেখতে পাচ্ছি , তাই আমি জানি প্রথম অংশটি কাজ করেছে। তবে, টেবিলটি খালি রয়েছে।

ত্রুটি লগ দেখায় field_create_instance()পদ্ধতিটি এটি ফিরিয়ে দিয়েছে:

array (
  'field_name' => 'field_mymod_myfile',
  'entity_type' => 'mymod_content',
  'bundle' => 'mymod_content',
  'required' => true,
  'field_id' => '5',
)

আমার ক্ষেত্রটি কেন এই সামগ্রীর ধরণে প্রদর্শিত হচ্ছে না?


1
আপনি কি বৈশিষ্ট্য পছন্দ করেন না? ফিল্ডইউআই ব্যবহার করে সামগ্রী প্রকারটি তৈরি করা আমার পক্ষে সবচেয়ে সহজ মনে হচ্ছে তারপরে বৈশিষ্ট্যটি একটি কাস্টম "ফিচার" (মডিউল) এ রফতানি করুন। ... এটি কেবল আপনার এখানে থাকা হুক_ইনফোগুলি অ্যারে তৈরি করেছে - এবং ক্ষেত্র সংজ্ঞার জন্য অ্যারেগুলি। আপনি আপনার কাজটি সেভাবে পরীক্ষা করে দেখতে পারেন।
টেনকেড

উত্তর:


7

এটি আগের উত্তরটির সম্প্রসারণ হওয়ায় এটি এতটা উত্তর নয়।

আপনার কাস্টম মডিউল নোডের প্রকারে কাস্টম ক্ষেত্রগুলির জন্য সিস্টেমের কী প্রয়োজন তা নির্ধারণে আমি এই দুটি লিঙ্ক খুব সহায়ক বলে মনে করেছি।

সেরা: http://www.sitepPoint.com/creating-a-new-drupal-node-type/

ভাল অতিরিক্ত তথ্য: http://public-action.org/content/drupal-7-field-api-drupal-7-adding-custom-content-type-custom-fields-field-api

আমার যে সমস্যাটি ছিল তা হ'ল এগুলি (এবং প্রতিটি অনলাইন উদাহরণ যা আমি অনলাইনে খুঁজে পেতে পারি) হ'ল এটি আমার নিজের ব্যবহারের ক্ষেত্রে সমাধানের সমাধান বের করতে সহায়তা করার জন্য পর্যাপ্ত দলিল ছাড়াই খুব নির্দিষ্ট উদাহরণ।

কাস্টম ক্ষেত্রগুলির জন্য অ্যারেগুলি পেতে বৈশিষ্ট্যগুলি মডিউলটি ব্যবহার করার বিষয়ে টেনের মন্তব্য ওপিকে কী কী সাহায্য করেছিল।

তাই আমি বৈশিষ্ট্যগুলি মডিউলটি ডাউনলোড করে এটিকে সক্ষম করেছি: https://drupal.org/project/features

তারপরে আমি আমার কন্টেন্টের ধরণের ক্ষেত্রগুলি তৈরি করেছিলাম, আপনার মতো দ্রুপালে অ্যাডমিন ইন্টারফেসটি ব্যবহার করে সাধারণত যে আমি মডিউলটি তৈরি করতে চাই। তারপরে আমি স্ট্রাকচার> বৈশিষ্ট্যগুলি> বৈশিষ্ট্য তৈরি করে বৈশিষ্ট্যটির জন্য একটি বগাস নাম (আমি "পরীক্ষা" ব্যবহার করেছি) রেখেছি এবং তারপরে উপাদানগুলির ক্ষেত্রগুলিতে "ফিল্ড ইনস্ট্যান্স" এ ক্লিক করুন এবং কাস্টম ক্ষেত্রগুলির জন্য বাক্সগুলি পরীক্ষা করে দেখি। ক্ষেত্রগুলির সমস্তটির নাম নোডের মতো- [আপনার নোডের মেশিনের নাম] - [ক্ষেত্রের নাম], তাই আমার ক্ষেত্রে যেহেতু আমি একটি চিত্র ক্ষেত্র চেয়েছিলাম সেটি নোড-নভেল_সেকশন-ফিল্ড_আইমেজ।

আমার নোড প্রকারের জন্য কাস্টম ক্ষেত্রগুলি নির্বাচন করার পরে আমি কেবল "ডাউনলোড বৈশিষ্ট্যটি" ক্লিক করেছি এবং .tar ফাইলটি আমার ডেস্কটপে সংরক্ষণ করেছি, এটি খুললাম, "টেস্ট" ফোল্ডারটি খুললাম তারপরে পরীক্ষা.ফিটচার্স.ফিল্ড_বেস.ইনক এবং পরীক্ষা দেখেছি। আমার ক্ষেত্রগুলির জন্য প্রয়োজনীয় অ্যারেগুলি পেতে বৈশিষ্ট্য.ফিল্ড_ইনস্ট্যান্স.ইনক।

তারপরে আমি পোস্ট করা প্রথম লিঙ্কটির দ্বারা বর্ণিত কাঠামোটি স্রেফ ব্যবহার করেছি এবং তারপরে এটি পুরোপুরি কার্যকর হয়েছিল। আমার জন্য.

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

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

বৈশিষ্ট্য মডিউলের এই কার্যকারিতাটি নির্দেশ করার জন্য টেনকে ধন্যবাদ, আমি এটি কখনই ব্যবহার করতাম না এবং জানতাম না যে এটি করবে।


4

এই কোডটি নতুন সামগ্রী সামগ্রী তৈরি করা হবে যা। ইনস্টল ফাইলটিতে যুক্ত করা উচিত।

হুক_ইনস্টল () যুক্ত করা হচ্ছে:

<?php
function your_module_name_install() {
  // use get_t() to get the name of our localization function for translation
  // during install, when t() is not available.
  $t = get_t();

  // Define the node type.
  $node_example = array(
    'type' => 'node_example',
    'name' => $t('Example Node'),
    'base' => 'node_content',
    'description' => $t('This is an example node type with a few fields.'),
    'body_label' => $t('Example Description')
  );

  // Complete the node type definition by setting any defaults not explicitly
  // declared above.
  // http://api.drupal.org/api/function/node_type_set_defaults/7
  $content_type = node_type_set_defaults($node_example);
  node_add_body_field($content_type);

  // Save the content type
  node_type_save($content_type);
}
?>

আপনার উচিত ড্রুপাল বার্তা এবং এই ইভেন্টটি লগতে লিখুন:

<?php
function your_module_name_install() {
  $t = get_t();
  $node_example = array(
    'type' => 'node_example',
    'name' => $t('Example Node'),
    'base' => 'node_content',
    'description' => $t('This is an example node type with a few fields.'),
    'body_label' => $t('Example Description')
  );
  $content_type = node_type_set_defaults($node_example);
  node_add_body_field($content_type);
// Check if we create content type or update.
  $status = node_type_save($content_type);
// Replacement rule for the messages.
  $t_args = array('%name' => $content_type->name);
  if ($status == SAVED_UPDATED) { // update case
    drupal_set_message($t('The content type %name has been updated.', $t_args));
  } 
  elseif ($status == SAVED_NEW) { // create case
    drupal_set_message($t('The content type %name has been added.', $t_args));
    watchdog('node', 'Added content type %name.', $t_args, WATCHDOG_NOTICE, l($t('view'), 'admin/structure/types')); 
  }
}
?>

আপনার সামগ্রীর প্রকারটি সরাতে হুক_উনস্টল () সরবরাহ করুন :

<?php
function your_module_name_uninstall() {
  // Gather all the example content that might have been created while this
  // module was enabled.  Simple selects still use db_query().
  // http://api.drupal.org/api/function/db_query/7
  $sql = 'SELECT nid FROM {node} n WHERE n.type = :type';
  $result = db_query($sql, array(':type' => 'node_example'));
  $nids = array();
  foreach ($result as $row) {
    $nids[] = $row->nid;
  }
  // Delete all the nodes at once
  // http://api.drupal.org/api/function/node_delete_multiple/7
  node_delete_multiple($nids);
  // Delete our content type
  // http://api.drupal.org/api/function/node_type_delete/7
  node_type_delete('node_example');
}
?>

খুব বিস্তারিত প্রতিক্রিয়ার জন্য আপনাকে ধন্যবাদ, তবে আমি কীভাবে একটি ফাইল ক্ষেত্র তৈরির পরে বিষয়বস্তুতে যুক্ত করব?
কেনি ওয়াইল্যান্ড

আমি উপরে আপনার কোড ব্যবহার করেছি এবং এটিতে admin/structure/types
লিখিত

1
এটি কাজ করার জন্য, আপনাকে আপনার মডিউলে হুক_ফর্ম () প্রয়োগ করতে হবে অন্যথায় আপনি যদি ডাটাবেসে নোড_ টাইপ সারণিতে সন্ধান করেন তবে আপনি লক্ষ্য করবেন যে আপনার নতুন নির্মিত প্রকারটি অক্ষম রয়েছে। হুক_ফর্ম () প্রয়োগ করা এটি সক্রিয় করে বলে মনে হচ্ছে (এটি কেন এইরকম, আমার কোনও ধারণা নেই এবং এটি খুব একটা বোঝায় না)। এটি উপায় দ্বারা আপনার দ্বিতীয় মন্তব্য ঠিকানা।
ব্যবহারকারী 5013

1

এই পোস্টটি কিছুটা সেকেলে, তবে এটি যদি সহায়তা করে তবে আমি এই নিবন্ধটি খুব পরিষ্কার বলে খুঁজে পেয়েছি। এটি আপনাকে ধাপে ধাপে কীভাবে একটি নতুন সামগ্রী তৈরি করতে পারে তা দেখায়।

টিউটোরিয়াল লিঙ্ক

<?php

/**
 * Implements hook_install().
 */
function book_install()
{

    $t = get_t();

    // Step 1 - Define the custom content type

    $content_type = array(

        'type'          => 'book',
        'name'          => $t('Book'),
        'description'   => $t('Create a new book'),
        'title_label'   => $t('Book title'),
        'base'          => 'node_content',
        'custom'        => TRUE,

    );

    $node_type = node_type_set_defaults($content_type);

    node_type_save($node_type);

    // Step 2 - Create new fields

    $fields = array(

        // Author’s name

        'book_author_name'  => array(

            'field_name'    => 'book_author_name',
            'type'          => 'text',
            'cardinality'   => 1,

        ),

        // Description

        'book_description'  => array(

            'field_name'    => 'book_description',
            'type'          => 'text_long',
            'cardinality'   => 1,

        ),

    );

    foreach( $fields as $field ) {

        field_create_field($field);

    }

    // Step 3 - Attach fields to content type

    $instances = array(

        // Author’s name

        'book_author_name'  => array(

            'field_name'   => 'book_author_name',
            'label'        => $t('Author Name'),
            'required'     => TRUE,
            'widget'       => array(
                'type'  => 'text_textfield'
            ),

        ),

        // Description

        'book_description'  => array(

            'field_name'   => 'book_description',
            'label'        => $t('Description'),
            'required'     => TRUE,
            'widget'       => array(
                'type'  => 'text_textarea'
            ),

        ),

    );

    foreach( $instances as $instance ) { // Loop through our instances

        $instance['entity_type']   = 'node';
        $instance['bundle']        = 'book'; // Attach the instance to our content type

        field_create_instance($instance);

    }

}

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