প্রোগ্রামগুলিতে মডিউলটিতে কাস্টম টোকেন কীভাবে তৈরি করা যায়


23

আপনি প্রোগ্রামক্রমে একটি টোকেন তৈরি সম্পর্কে কীভাবে যাবেন? আমি আমার মডিউলটির জন্য কিছু কাস্টম টোকেন যুক্ত করতে চাই।


অতিরিক্ত ডকুমেন্টেশন আপডেট করা হয়েছে (অক্টোবর 31,2014) এবং এ পাওয়া যাবে drupal.org/documentation/modules/token
iStryker

উত্তর:


7

ড্রুপাল 6 এ, আপনি ব্যবহার করুন hook_token_values()

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

hook_token_list()আপনার টোকেনগুলি কী তা বোঝাতে আপনার ব্যবহার করা উচিত ।

Token.api ডকুমেন্টেশন বেশ স্পষ্ট।

function my_user_token_values($type, $object = NULL, $options = array()) {
  if ($type == 'user') {
    $user = $object;
    $tokens['name']      = $user->name;
    $tokens['mail']      = $user->mail;
    return $tokens;
  }
}

আমি পুরো জিনিসটি এক্স পোস্ট করব না তবে এটি আপনাকে একটি উচ্চ স্তরের ধারণা দেবে।


20

দ্রুপাল In-তে টোকেন পরিচালনা করার কোডটি দ্রুপাল কোর মডিউলটির অংশ।

টোকন মডিউলগুলি প্রয়োগ করতে হুকগুলি হ'ল:

  • hook_token_info () হুক যা একটি মডিউল দ্বারা প্রয়োগ টোকেন সম্পর্কে তথ্য সরবরাহ করে।
  • হুক_ টোকেন্স () হুক যা টোকেনগুলি প্রতিস্থাপন করে এমন আসল মান প্রদান করতে প্রয়োগ করা দরকার।

অন্যান্য মডিউল হুক_ টোকেন_ইনফো_াল্টার () এবং হুক_ টোকেন_লটার () ব্যবহার করে মডিউল থেকে প্রদত্ত টোকেন প্রয়োগকে পরিবর্তন করতে পারে ।

টোকেন মডিউল থেকে আলাদাভাবে, দ্রুপাল কোর কোডটি কেবলমাত্র কঠোরভাবে প্রয়োজন হলে টোকেনের সামগ্রী তৈরি করতে দেয়। ড্রুপাল 6 এ, টোকেন মডিউলটি তাদের টোকেন ব্যবহারের জন্য সমস্ত মান টোকেন প্রয়োগকারী মডিউলগুলিকে জিজ্ঞাসা করবে hook_token_values(); এর অর্থ হল একটি মডিউল একটি টোকেনের মান গণনা করতে পারে যা টোকেনগুলি প্রতিস্থাপনের জন্য প্রয়োজন হয় না। ড্রুপাল 7-এ, hook_tokens()প্রাপ্তির বাস্তবায়ন $tokens, টোকেনের একটি অ্যারে প্রতিস্থাপনের জন্য, যুক্তি হিসাবে; মডিউলটি তখন টোকেনের মান গণনা করতে সক্ষম, এটি ব্যবহার করা হবে তা জেনে।

টুঙ্কনগুলি তাদের মানের সাথে প্রতিস্থাপন করতে ড্রুপাল 7-এ যে ফাংশনটি ব্যবহৃত হয় তা হ'ল টোকেন_রেপ্লেস () , যা টোকেনগুলি তাদের মানগুলির সাথে প্রতিস্থাপন করতে ব্যবহৃত একমাত্র ফাংশন।

দ্রুপাল 6 এর টোকেন মডিউল এবং দ্রুপাল 7-এর কোডের মধ্যে অন্যান্য পার্থক্য হ'ল

  • দ্রুপাল In-তে, [নোড: লেখক] লেখকের নাম ফিরিয়ে দেয়; [নোড: লেখক: মেল] নোডের লেখকের সাথে সম্পর্কিত ইমেল ঠিকানাটি ফেরত দেয় এবং [নোড: লেখক: url] নোড লেখকের জন্য ব্যবহারকারীর ইউআরএলটির URL প্রদান করে returns অন্য কথায়, [নোড: লেখক: xyz] ব্যবহার করা সম্ভব, যেখানে "xyz" একটি ব্যবহারকারীর বস্তুর জন্য ফিরে আসা টোকেনগুলির মধ্যে একটি।
  • ড্রুপাল 7 এ, কাঁচা টোকেন নেই; বাস্তবায়ন hook_tokens()একটি প্যারামিটার যে হুক যখন টোকেন চাহিদা বিষয়বস্তুর sanitized করা বলে পান; যখন টোকেন মানটি স্যানিটাইজ করার প্রয়োজন হয় না, তখন সামগ্রীটি ফাংশনগুলিতে প্রেরণ করা হয় না check_plain()বা filter_xss()
  • ড্রুপাল 7-তে, এমন কোনও ফাংশন নেই যা উপলব্ধ টোকেনগুলির তালিকা দেখায়। যদি কোনও মডিউলটিকে উপলভ্য টোকেনগুলির তালিকা প্রদর্শন করতে হয় তবে এটি অবশ্যই টোকেনের তালিকাটি তৈরি করতে হবে এবং একটি ফর্ম ক্ষেত্রের বর্ণনায় এটি প্রদর্শন করতে হবে; বিকল্পভাবে, এটি টোকন মডিউলটিতে এখনও উপলব্ধ থিম ফাংশনটি ব্যবহার করতে পারে।

8

আমি টোকেনগুলির সাইটের তথ্য বিভাগে একটি নতুন টোকেন যুক্ত করতে চেয়েছিলাম , যার নাম ছিল শহরের নাম । ড্রুপাল in-তে আমি এটিই করেছি।

 /**
 * Implements hook_token_info().
 */
function my_module_token_info() {

  // Add tokens.
  $site['city_name'] = array(
    'name' => t('Token Name'),
    'description' => t('Token Description'),
  );

  return array(
    'tokens' => array(
      'site' => $site,
    ),
  );
}

/**
 * Implements hook_tokens().
 */
function my_module_tokens($type, $tokens, array $data = array(), array $options = array()) {
  $replacements = array();

 if ($type == 'site') {
    foreach ($tokens as $name => $original) {
      switch ($name) {
        case 'city_name':
          $city_name = variable_get('city_name');
          $replacements[$original] = $sanitize ? check_plain($city_name) : $city_name;
          break;
      }
    }
  }

  // Return the replacements.
  return $replacements;
}

একটি উদাহরণ দেওয়ার জন্য ধন্যবাদ। তারা সর্বদা সহায়ক
আইস্ট্রিকার

1
সুতরাং টোকেন উপরোক্ত উদাহরণে হবে: [site:city_name]। নিশ্চিত হয়ে নিন আপনি ক্যাচগুলি সাফ করেছেন বা ব্যবহার করা হলে ম্যাকচেড পুনরায় চালু করবেন।
কেনারব

দ্রষ্টব্য: $sanitizeউপরের উদাহরণে সংজ্ঞায়িত করা হয়নি, সুতরাং আপনি Notice: Undefined variableএটি সম্পর্কে পাবেন ।
কেনারব

@ একরব ভাল চোখ, এবং আমি দেখতে পাচ্ছি যে এই উত্তরটি আপডেট হয়েছে :)
ওয়েবএমডাব্লু

3

ড্রুপাল 8 এর জন্য উদাহরণস্বরূপ নোড অবজেক্টটি ব্যবহার করে:

আপনি প্রতিস্থাপনের ডেটার জন্য hook_token_info () ব্যবহার করে এবং হুক_ টোকেন () ব্যবহার করে mymodule.tokens.inc এ আপনার মডিউলটিতে টোকেন রাখতে পারেন।

আপনি যদি কোনও বিদ্যমান টোকেন ধরণের জন্য যেমন নোডের জন্য একটি কাস্টম টোকেন তৈরি করতে চান তবে আপনাকে আপনার টোকেনটি হুক_ টোকেন_ইনফো () এর মধ্যে সাববারির মধ্যে রাখতে হবে। আপনি কী তৈরি করছেন তা দেখার জন্য নোড মডিউলে নোড.টোকেনস.ইনিকে দেখুন।

mymodule.tokens.inc:

<?php

use Drupal\Core\Render\BubbleableMetadata;
use Drupal\image\Entity\ImageStyle;

/**
 * Implements hook_token_info().
 */
function mymodule_token_info() {
  $info = array();

  $info['tokens']['node']['custom_title'] = [
    'name' => t("Custom Title"),
    'description' => t("a custom node title token"),
  ];
  // Return them.
  return $info;
}

/**
 * Implements hook_tokens().
 */
function mymodule_tokens($type, $tokens, array $data, array $options, BubbleableMetadata $bubbleable_metadata) {

  $replacements = array();
  if ($type == 'node') {
    foreach ($tokens as $name => $original) {
      // Find the desired token by name
      switch ($name) {
        case '$data['node']':
          $node = $data['node'];
          $replacements[$original] = $node->label();
          break;
      }
    }
  }
  // Return the replacements.
  return $replacements;
}

2

দ্রুপাল 8 এর জন্য

// We need to include the needed class for tokens.

use Drupal\Core\Render\BubbleableMetadata;

/**
 * Implements hook_token_info().
 */
function modulename_token_info() {
  $info = array();
  // Add any new tokens.
  $info['tokens']['customtokentype']['customtoken'] = t('Telling drupal that you define custom token');
  // Return them.
  return $info;
}

/**
 * Implements hook_tokens().
 */
function modulename_tokens($type, $tokens, array $data, array $options, BubbleableMetadata $bubbleable_metadata) {
  $replacements = array();
  $simple = $data["customanything"];
  if ($type == 'customtokentype') {
    foreach ($tokens as $name => $original) {
      // Find the desired token by name
      switch ($name) {
        case 'customtoken':
          $new = $simple;
          $replacements[$original] = $new;
          break;
      }
    }
  }   
  // Return the replacements.
  return $replacements;
}

আপনার ফাংশনে টোকেনের মান পেতে নিম্নলিখিত কোডগুলির মতো কোড দরকার requires

$token = \Drupal::token();
$message_html = "hello my custom token is replaced see it here [customtokentype:customtoken]";

// Token data.
$data = array('customanything' => $tosendtotokens);
$message_html = $token->replace($message_html, $data);

1
কি newএবং simpleএই উদাহরণে?
ব্যবহারকারী1359

ড্রুপাল \ কোর \ রেন্ডার \ বুদবুদযোগ্য মেটাডেটা ব্যবহার করুন; $ টোকেন = \ দ্রুপাল :: টোকেন (); ফাংশন মডিউলনাম_ টোকেনস ($ প্রকার, $ টোকেন, অ্যারে $ ডেটা, অ্যারে $ বিকল্পগুলি, বুদ্বুদযোগ্য মেটাডেটা $ বুদবুদ_মেডাটাটা) {...}
কার্তিকেয়ন মণিবসাগম

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