किसी मॉड्यूल में प्रोग्राम टोकन बनाने के लिए कैसे


23

आप प्रोग्रामेटिक रूप से टोकन बनाने के बारे में कैसे जाएंगे? मैं अपने मॉड्यूल के लिए कुछ कस्टम टोकन जोड़ना चाहता हूं।


अतिरिक्त दस्तावेज़ीकरण अपडेट किया गया है (
31,2014

जवाबों:


7

Drupal 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

Drupal 7 में टोकन से निपटने के लिए कोड Drupal कोर मॉड्यूल का हिस्सा है।

टोकन मॉड्यूल को लागू करने के लिए आवश्यक हुक हैं:

  • Hook_token_info () एक हुक है जो एक मॉड्यूल द्वारा कार्यान्वित टोकन के बारे में जानकारी प्रदान करता है।
  • हुक_टोकेंस () वह हुक है जिसे टोकनों को बदलने वाले वास्तविक मूल्यों को प्रदान करने के लिए लागू करने की आवश्यकता है।

अन्य मॉड्यूल hook_token_info_alter () और hook_tokens_alter () का उपयोग करके एक मॉड्यूल से प्रदान टोकन कार्यान्वयन को बदल सकते हैं ।

टोकन मॉड्यूल से अलग, ड्रुपल कोर में कोड केवल एक टोकन की सामग्री बनाने की अनुमति देता है जब कड़ाई से आवश्यक हो। Drupal 6 में, टोकन मॉड्यूल उन मॉड्यूलों से पूछेगा जो उनके टोकन के उपयोग के लिए सभी मूल्यों को लागू करते हैं hook_token_values(); इसका मतलब है कि एक मॉड्यूल एक टोकन के लिए मूल्य की गणना कर सकता है जो तब टोकन को प्रतिस्थापित करने के लिए आवश्यक नहीं है। Drupal 7 में, कार्यान्वयन की hook_tokens()प्राप्त करता है $tokens, टोकन की एक सरणी तर्क के रूप में, प्रतिस्थापित किया जा करने के लिए; मॉड्यूल तब एक टोकन के मूल्य की गणना करने में सक्षम है, यह जानते हुए कि इसका उपयोग किया जाएगा।

Drupal 7 में फ़ंक्शन का उपयोग टोकन को उनके मान के साथ बदलने के लिए किया जाता है, token_replace () है , जो टोकन को उनके मानों से बदलने के लिए उपयोग किया जाने वाला एकमात्र फ़ंक्शन है।

Drupal 6 के लिए टोकन मॉड्यूल और Drupal 7 में कोड के बीच अन्य अंतर हैं:

  • ड्रुपल 7 में, [नोड: लेखक] लेखक का नाम लौटाता है; [नोड: लेखक: मेल] एक नोड के लेखक के साथ जुड़ा ईमेल पता देता है, और [नोड: लेखक: url] नोड लेखक के लिए उपयोगकर्ता प्रोफ़ाइल का URL लौटाता है। दूसरे शब्दों में, [नोड: लेखक: xyz] का उपयोग करना संभव है, जहां "xyz" उपयोगकर्ता ऑब्जेक्ट के लिए लौटे टोकन में से एक है।
  • ड्रुपल 7 में, कच्चे टोकन नहीं हैं; hook_tokens()एक पैरामीटर प्राप्त करने का कार्यान्वयन जो हुक को बताता है जब टोकन की सामग्री को स्वच्छता की आवश्यकता होती है; जब टोकन मूल्य को सैनिटाइज करने की आवश्यकता नहीं होती है, तो सामग्री फ़ंक्शंस में पास नहीं होती है check_plain()या नहीं filter_xss()
  • Drupal 7 में, कोई भी फ़ंक्शन नहीं है जो उपलब्ध टोकन की सूची दिखाता है। यदि किसी मॉड्यूल को उपलब्ध टोकन की सूची दिखाने की आवश्यकता है, तो उसे टोकन की सूची को स्वयं बनाना होगा और इसे एक फॉर्म फ़ील्ड के विवरण में दिखाना होगा; वैकल्पिक रूप से, यह टोकन मॉड्यूल में उपलब्ध थीम फ़ंक्शन का उपयोग कर सकता है।

8

मैं शहर के नाम से टोकन के साइट सूचना अनुभाग में एक नया टोकन जोड़ना चाहता था । यह मैंने ड्रुपल 7 में कैसे किया।

 /**
 * 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;
}

एक उदाहरण प्रदान करने के लिए धन्यवाद। वे हमेशा सहायक होते हैं
iStryker

1
तो टोकन उपरोक्त उदाहरण में होगा [site:city_name]:। सुनिश्चित करें कि यदि आपने उपयोग किया है तो कैश साफ़ करें या फिर से शुरू करें।
kenorb

नोट: $sanitizeऊपर के उदाहरण में परिभाषित नहीं किया गया है, इसलिए आप इसके Notice: Undefined variableबारे में जानेंगे।
kenorb

@kenorb अच्छी आंख, और मुझे लगता है कि यह जवाब तब से अद्यतन किया गया है :)
WebMW

3

Drupal 8 के लिए, नोड ऑब्जेक्ट का उपयोग करके उदाहरण:

आप प्रतिस्थापन डेटा के लिए उन्हें और hook_tokens () को पंजीकृत करने के लिए 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;
}

अपने फ़ंक्शन में टोकन का मूल्य प्राप्त करना निम्न के समान कोड की आवश्यकता है।

$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इस उदाहरण में?
user1359

Drupal \ Core \ Render \ BubbleableMetadata का उपयोग करें; $ टोकन = \ Drupal :: टोकन (); फ़ंक्शन modulename_tokens ($ प्रकार, $ टोकन, सरणी $ डेटा, सरणी $ विकल्प, BubbleableMetadata $ bubbleable_metadata) {...}
कार्तिकेयन मणिवसगता

यह
बजे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.