অ্যাক্টিভ ড্রুপাল থিম প্রোগ্রামগতভাবে পরিবর্তন করার সঠিক উপায়?


22

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

উত্তর:


15

ড্রুপাল 6 সমাধান:

আপনি নিশ্চিত করতে চান যে $custom_themeপৃষ্ঠাগুলি কার্যকর করার জন্য আপনি বিশ্বব্যাপী পরিবর্তনশীল মোটামুটি প্রথম দিকে পরিবর্তন করেছেন ।

global $custom_theme;
$custom_theme = 'garland';

পৃষ্ঠাগুলি কার্যকরকরণের খুব শীঘ্রই চেষ্টা করার জন্য বেশ কয়েকটি হুক (যদি আপনি কোনও কাস্টম মডিউল ব্যবহার করছেন) হুক _ বুট () এবং হুক_ইনিট ()।
ডেভিড Lanier

$custom_themeসংজ্ঞায়িত কোথায় ? থিম পরিবর্তন করার জন্য এটি কি যথেষ্ট?
মোহাম্মদ আলী আকবরী

2
দয়া করে, উল্লেখ hook_custom_theme api.drupal.org/api/drupal/modules%21system%21system.api.php/...
Capi Etheriel

1
সাফল্যের পুনরুত্পাদন করতে পারেনি। : <
স্টারলোক

আমার জন্য কাজ করেছেন। আমি এর মধ্যে যোগ hook_boot ()
মার্ক

15

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

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


4
হ্যাঁ আপনি যদি এটি ইউআইয়ের মাধ্যমে পরিচালনা করতে চান তবে আমি থিমকে সুপারিশ করব।
ডেভ রেড

অথবা কমপক্ষে চেকআউট drupalcode.org/project/themekey.git/blob/refs/heads/7.x-2.x:/… যেখানে থিমকি তার যাদু করে
ক্যাপি ইথেরিয়েল

@ চাউলকি ঠিক বলেছেন: আমি থিমকি ব্যবহার করছি কিছুক্ষণ থেকেই, ব্যবহারকারীর নাম, ভূমিকা, পৃষ্ঠা, যা খুশি তাই সেগুলি পছন্দসই পরিচালনা করার সহজতম উপায়। আমি এটি সুপারিশ।
বেনজ

14

এটি করার সর্বোত্তম উপায় হ'ল মডিউলটিতে আপডেট হুক তৈরি করা:

function yourmodule_update_N() {
  variable_set('theme_default','yourtheme');
}

এটি সঠিক উত্তর হওয়া উচিত ..
নিক ব্যারেট

আপনি কেবল বিশ্বব্যাপী থিম পরিবর্তন করতে চাইলে এটি ঠিক হবে। আমি প্রশ্নটি ধরে নিয়েছিলাম যে ওপি একটি নির্দিষ্ট পৃষ্ঠায়, বা কোনও নির্দিষ্ট প্রসঙ্গে থিমটি পরিবর্তন করতে চেয়েছিল।
ইভান ডোনভান

7

দ্রাশের মাধ্যমে সক্রিয় থিম পরিবর্তন করা

drush vset theme_default garland
drush vset admin_theme garland
drush cc all

একটি মডিউল মাধ্যমে সক্রিয় থিম পরিবর্তন

ডিফল্ট থিম এবং প্রশাসনের থিম পরিবর্তন করার মূল বিষয়গুলি:

// Changes the theme to Garland
variable_set('theme_default', $theme_default);
// Changes the administration theme to Garland
variable_set('admin_theme', $admin_theme);

বার্তিক বা গারল্যান্ডের মতো ডিফল্ট থ্রুপাল থিমগুলিতে সুরক্ষিতভাবে থিমগুলি সেট করার জন্য এখানে একটি ছোট ফাংশন রয়েছে (ড্রুপাল 6 এবং 7 তে পরীক্ষা করা হয়েছে):

/**
 * Set the active Drupal themes (the default and the administration theme) to default ones.
 * Tested in Drupal 6, 7 (but possibly working in version 8 too according to the documentations [some similarities between 7 and 8]).
 */
function TESTMODULE_set_active_theme_to_default($affect_admin_theme = TRUE) {

  // Provides a list of currently available themes.
  $list_themes = list_themes(TRUE);
  // 6, 7, 8, etc.
  $major_version = (int)VERSION;

  $theme_default = isset($list_themes['bartik']) ? 'bartik' : 'garland';
  $admin_theme   = isset($list_themes['seven']) ? 'seven' : 'garland';

  // Changes the theme to Garland
  variable_set('theme_default', $theme_default);

  // Changes the administration theme to Garland if argument is TRUE
  if($affect_admin_theme){
    variable_set('admin_theme', $admin_theme);
  }

  // if Switchtheme module (https://drupal.org/project/switchtheme) is enabled, use it
  if (module_exists('switchtheme')) {
    if (empty($_GET['theme']) || $_GET['theme'] !== $theme_default) {
      $query = array(
        'theme' => $theme_default
      );
      // in D6, drupal_goto's second argument is the query string,
      // in >=D7, a more general $options array is used
      if($major_version < 7){
        $options = $query;
      }
      else{
        $options = array('query' => $query);
      }

      drupal_goto($_GET['q'], $options);
    }
  }

  drupal_set_message(t('Default theme has been changed to %theme_default, administration theme has been changed to %admin_theme.', array(
    '%theme_default' => $theme_default,
    '%admin_theme' => $admin_theme
  )));

}

আপনি এটি একটি হুক_ইনিট () প্রয়োগে কল করতে পারেন (এটির প্রয়োজন না হওয়ার পরে এটি মন্তব্য করুন):

/**
 * Implements hook_init()
 */
function TESTMODULE_init() {  
  // ATTENTION! Comment out the following line if it's not needed anymore!
  TESTMODULE_set_active_theme_to_default();
}

কোনও ইনস্টল প্রোফাইলে কোনও থিম সক্ষম করার সময় আপনি এই পদ্ধতিটি ব্যবহার করবেনvariable_set('theme_default','yourtheme');
ডানকানমু

7

ড্রুপাল 7 এ, ব্যবহার করুন hook_custom_theme():

/**
 * Implements hook_custom_theme()
 * Switch theme for a mobile browser
 * @return string The theme to use
 */
function mymodule_custom_theme()  {
    //dpm($_SERVER['HTTP_USER_AGENT']);
    $theme = 'bartik'; // core theme, used as fallback
    $themes_available = list_themes(); // get available themes
    if (preg_match("/Mobile|Android|BlackBerry|iPhone|Windows Phone/", $_SERVER['HTTP_USER_AGENT'])) {
        if (array_key_exists('custommobiletheme', $themes_available)) $theme = 'custommobiletheme';
        else { drupal_set_message("Unable to switch to mobile theme, because it is not installed.", 'warning'); }
    }
    else if (array_key_exists('nonmobiletheme', $themes_available)) $theme = 'nonmobiletheme';
    // else, fall back to bartik

    return $theme;
}

<Emoticode /> থেকে অভিযোজিত

বর্তমান পৃষ্ঠার জন্য ব্যবহার করতে থিমটির মেশিন-পঠনযোগ্য নামটি ফিরিয়ে দিন।

এই ফাংশনটির জন্য মন্তব্যগুলি পড়ার উপযুক্ত হতে পারে:

এই হুকটি বর্তমান পৃষ্ঠার অনুরোধের জন্য থিমটি গতিশীলভাবে সেট করতে ব্যবহৃত হতে পারে। এটি মডিউল দ্বারা ব্যবহার করা উচিত যা গতিশীল অবস্থার উপর ভিত্তি করে থিমটিকে ওভাররাইড করতে হবে (উদাহরণস্বরূপ, এমন একটি মডিউল যা বর্তমান ব্যবহারকারীর ভূমিকার উপর ভিত্তি করে থিমটি সেট করতে দেয়)। এই হুকটির রিটার্ন মান হুক_মেনু () তে থিম কলব্যাক ফাংশনের মাধ্যমে বৈধ প্রতি-পৃষ্ঠা বা প্রতি-বিভাগ থিম সেট করা ব্যতীত সমস্ত পৃষ্ঠায় ব্যবহৃত হবে; এই পৃষ্ঠাগুলির থিমগুলি কেবল hook_menu_alter () ব্যবহার করে ওভাররাইড করা যাবে।

নোট করুন যে একই পথের জন্য বিভিন্ন থিমগুলি ফিরিয়ে দেওয়া পৃষ্ঠা ক্যাচিংয়ের সাথে কাজ নাও করতে পারে। প্রদত্ত পথে কোনও বেনামী ব্যবহারকারী বিভিন্ন শর্তে বিভিন্ন থিম ফিরিয়ে আনতে পারলে এটি সম্ভবত সমস্যা হওয়ার সম্ভাবনা রয়েছে।

যেহেতু একসাথে কেবলমাত্র একটি থিম ব্যবহার করা যেতে পারে তাই সর্বশেষ (অর্থাত্ সর্বোচ্চতম ওজনযুক্ত) মডিউলটি এই হুক থেকে কোনও বৈধ থিমের নাম ফেরত দেয়।


3

ড্রুপাল 8 এর জন্য:

Settings.php এ

$config['system.theme']['default'] = 'my_custom_theme';

কনফিগারেশন আপডেট কনফিগারেশন:

\Drupal::configFactory()
->getEditable('system.theme')
->set('default', 'machine_name')
->save();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.