Drupal 7 के साथ ब्लॉक में 'Welcome {उपयोगकर्ता नाम} कैसे जोड़ें


15

मैं एक ड्रुपल वेबसाइट को एक ड्रुपल 7 एक ही सामग्री के साथ बदल रहा हूं। उस Drupal 6 वेबसाइट पर एक ब्लॉक है जो आपके लॉग इन करते समय दिखाई देता है। शीर्षक के रूप में यह उस ब्लॉक में 'Welcome {उपयोगकर्ता नाम} संदेश को दर्शाता है।

मैं Drupal 7 में ऐसा करने का तरीका ढूंढ रहा हूं, मैंने इसे 'टोकन' मॉड्यूल के साथ करने की कोशिश की, लेकिन मैं काम नहीं करता। ऐसा करने का सबसे अच्छा तरीका क्या है?


यहाँ उस बारे में एक ब्लॉग पोस्ट है: is.gd/j2q0Uu
AyeshK

जवाबों:


12

या तो किसी ब्लॉक में या किसी ब्लॉक को जोड़ने वाले कस्टम मॉड्यूल में, निम्न कोड जोड़ें:

if (user_is_logged_in() == TRUE) {
    global $user;

    print "Welcome " . $user->name;
}
else {
    print "Please log in.";
}

यदि आप CURRENT उपयोगकर्ता जानकारी चाहते हैं तो यह अधिक उपयोगी है। संभवतः यहuser_is_logged_in फ़ंक्शन के लिए भी है।


यह ठीक काम किया। मैंने इसका पहला उत्तर नीचे पढ़कर हल खोजा। हालाँकि, मुझे php कंटेंट के लिए मॉड्यूल के बारे में नहीं पता था जो कि Drupal के साथ दिया गया मानक है, इसलिए मुझे थोड़ा और खोज करना था। आपके जवाब के लिए धन्यवाद।
गुआन 23

User_is_logged_in () को कॉल करने की कोई आवश्यकता नहीं है, जैसा कि आप केवल वही कर रहे हैं जो आप पहले से ही $ $ $ वैश्विक चर का उपयोग करके कर रहे हैं। बस नीचे दिए गए मेरे जवाब के अनुसार $ उपयोगकर्ता की जांच करें।
रॉबी

5

यदि आप इसे एक मॉड्यूल में करना चाहते हैं (एक ब्लॉक में php कोड जोड़ने के लिए अनुशंसित है, जो तब संस्करण नियंत्रण में नहीं होगा), तो आप ऐसा कर सकते हैं:

(इस मामले में, यह सभी कोड यूजरव्यू नामक एक कस्टम मॉड्यूल में जाएगा।)

/**
 * @file
 * Adds a block that welcomes users when they log in.
 */

/**
 * Implements hook_theme().
 */
function userwelcome_theme($existing, $type, $theme, $path) {
  return array(
    'userwelcome_welcome_block' => array(
      'variables' => array('user' => NULL),
    ),
  );
}

/**
 * Implements hook_block_info().
 */
function userwelcome_block_info() {
  // This example comes from node.module.
  $blocks['welcome'] = array(
    'info' => t('User welcome'),
    'cache' => DRUPAL_CACHE_PER_USER,
  );

  return $blocks;
}

/**
 * Implements hook_block_view().
 */
function userwelcome_block_view($delta = '') {
  global $user;
  $block = array();

  switch ($delta) {
    case 'welcome':
      // Don't show for anonymous users.
      if ($user->uid) {
        $block['subject'] = '';
        $block['content'] = array(
          '#theme' => 'userwelcome_welcome_block',
          '#user' => $user,
        );
      }
      break;
  }
  return $block;
}

/**
 * Theme the user welcome block for a given user.
 */
function theme_userwelcome_welcome_block($variables) {
  $user = $variables['user'];
  $output = t('Welcome !username', array('!username' => theme('username', array('account' => $user))));
  return $output;
}

यदि आप तब किसी विषय में इस ब्लॉक की थीम को ओवरराइड करना चाहते थे, तो आप ऐसा करेंगे (अपने थीम के अपने टेम्पलेट में। फाइल में:

/**
 * Theme the userwelcome block.
 */
function THEMENAME_userwelcome_welcome_block(&$variables) {
  // Return the output of the block here.
}

ध्यान दें कि क्योंकि यह एक कस्टम मॉड्यूल है आप सीधे मॉड्यूल में थीम फ़िक्स्टन को अपडेट कर सकते हैं।

यदि आप एक कस्टम मॉड्यूल का उपयोग नहीं करना चाहते हैं तो आप php कोड के साथ एक कस्टम ब्लॉक बना सकते हैं और इसे जोड़ सकते हैं:

global $user;
// Only for logged in users.
if ($user->uid) {
  print 'Welcome ' . theme('username', array('account' => $user));
}

यह एक शानदार जवाब है, हालांकि मैं प्रत्येक फ़ंक्शन के नामकरण और स्थान के बारे में थोड़ा अस्पष्ट हूं। यहां मेरी धारणाएं हैं - क्या आप सलाह दे सकते हैं कि क्या मैं सही हूं? मान लिया गया है कि थीम का नाम theme_userwelcome, थीमtheme_userwelcome_welcome_block में रखा जाना चाहिए, मॉड्यूल नहीं । संभवतया, फ़ंक्शन को वास्तव में कहा जाना चाहिए (हाँ 2 थीम शब्द थीम के नाम के रूप में ) और थीम में रखा गया है । कार्य करता है और अंदर रहता है । userwelcomeuserwelcome_themeuserwelcome_theme_themehooktheme_userwelcomeuserwelcome_block_viewuserwelcome_block_infouserwelcome
इसके बाद

मैंने इस जानकारी के साथ उत्तर को अपडेट किया है: यह सभी कोड userwelcome नाम के एक मॉड्यूल को जाता है। यदि आप किसी थीम से ब्लॉक की थीम को ओवरराइड करना चाहते हैं तो आप THEMENAME_userwelcome_welcome_block (& ​​$ चर) का उपयोग करेंगे
rooby

5

मॉड्यूल का उपयोग करें। नया दृश्य बनाएं> उपयोगकर्ताओं को दिखाएं> ब्लॉक डिस्प्ले करें। प्रासंगिक फ़िल्टर जोड़ें> लॉग में उपयोगकर्ता से डिफ़ॉल्ट तर्क> उपयोगकर्ता आईडी प्रदान करें। फ़ील्ड को कॉन्फ़िगर करें (आप परिणामों को फिर से लिख सकते हैं) जो भी पाठ / टोकन या उपयोगकर्ता प्रोफ़ाइल फ़ील्ड शामिल करना चाहते हैं। सहेजें और क्षेत्र में ब्लॉक जोड़ें।

एक मॉड्यूल और कोई कोड के साथ किया।

-lunk_rat


मेरा दृढ़ता से मानना ​​है कि यह उत्तर अधिक उत्तोलन देता है। यह अधिक 'Drupal तरीका' लगता है। यदि आप इसे कॉन्फ़िगरेशन के साथ हल कर सकते हैं, तो इसे इस तरह से करें - बल्कि कोड का उपयोग करके।
आईडोग्राम

@ आईडोग्राम मेरा दृष्टिकोण भी है, यही वजह है कि मैंने जवाब प्रस्तुत किया भले ही कई अन्य समाधान काम करेंगे। लगता है कि इसे कुछ वोट मिल रहे हैं ...
लिंक स्वानसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.