প্রোগ্রামক্রমে ব্লক রাখুন?


14

আমি ড্রুপাল using ব্যবহার করছি Right এখনই, আমার কাছে একটি প্রধান মেনু নেভিগেশন এবং ভাষা স্যুইচার রয়েছে যা আমার ওয়েবসাইট শিরোনামে বিদ্যমান in আমি সেগুলি সিএমএস> কাঠামো> ব্লকগুলিতে গিয়ে এবং ব্লকগুলি হেডার অঞ্চলে টেনে নিয়ে গিয়ে সেখানে রেখেছি।

আমি কীভাবে প্রোগ্রামারিকভাবে এই ব্লকটিকে শিরোলেখের মধ্যে স্থির করব?


এই ব্লকটিকে প্রোগ্রামারিকভাবে কীভাবে শিরোনামে স্থিত করতে হয় সে সম্পর্কে আপনার প্রশ্ন অনুসারে, আমি উদাহরণগুলির মডিউল http://drupal.org/project/exferences পর্যালোচনা করার পরামর্শ দিচ্ছি এবং বিশেষত আপনি মডিউলটি ব্লক উদাহরণটি পর্যালোচনা করতে এবং সক্ষম করতে পারেন যাতে আপনার ব্লককে একটি প্রোগ্রামগতভাবে পরীক্ষা করে পরীক্ষা করা যায়? । আমার ধারণা block_example_block_info()এবং 'অঞ্চল' মানটি পরীক্ষার জন্য কার্যকর হতে পারে।
সিগোটে

জন, আপনি কি এর উত্তর নিয়ে এসেছেন?
রিলিপ করুন

উত্তর:


4

অন্যান্য মডিউল দ্বারা সংজ্ঞায়িত ব্লকগুলি যে অঞ্চলে স্থাপন করা হয়েছে তা পরিবর্তনের জন্য, আপনি hook_ block_info_alter () প্রয়োগ করতে পারেন , যা নিম্নলিখিত আর্গুমেন্টগুলি গ্রহণ করে:

  • $blocks (রেফারেন্স দ্বারা পাস করা হয়েছে): মডিউল দ্বারা কীড করা এবং ব্লক সংজ্ঞা সংযুক্ত অ্যারে containing
  • $theme: থিমটি যার জন্য ব্লকগুলি সংজ্ঞায়িত করা হচ্ছে
  • $code_blocks: hook_block_info()বাস্তবায়ন থেকে সংজ্ঞায়িত ব্লকগুলি , তাদের মানগুলি ডাটাবেস থেকে প্রাপ্ত মান দ্বারা ওভাররাইড করার আগে

3

হুক_পেজ_বিল্ড () এর যে কোনও পৃষ্ঠা অঞ্চলে একটি উপস্থাপনযোগ্য অ্যারে যুক্ত করা বৈধ। পাদচরণ অঞ্চলে একটি মিনিপ্যানেল যুক্ত করতে ড্রুপাল 7 উদাহরণ।

<?php
/**
 * Implements hook_page_build().
 */
function MODULE_page_build(&$page) {
  $block = module_invoke('panels_mini', 'block_view', 'blah');
  $blocks['blah'] = array('#markup' => $block['content']);

  $region = 'footer';
  if (isset($page[$region])) {
    $page[$region] = array_merge($page[$region], $blocks);
  }
  else {
    $page[$region] = $blocks;
  }
}

এটি অত্যন্ত একই কৌশল যা প্রসঙ্গের মডিউল ব্যবহার করে।

দ্রষ্টব্য: আপনার কাজ করার জন্য block.module সক্ষম করতে হবে না।


2

ডি 6 এ এটি মূলত হবে

$block = module_invoke("the_module_name", "block", "view", the_block_delta);
drupal_set_content("the_region_name", theme("block", $block));

ডি 7-এ আমার মনে হয় এটি

$block = module_invoke("the_module_name", "block_view", the_block_delta);
drupal_add_region_content("the_region_name", theme("block", $block));

তবে আমি এখনও ডি 7 তে গতিতে উঠছি।


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

বিশ্বাস drupal_add_region_content()ইনস্টল / আপগ্রেড পৃষ্ঠাগুলির উদ্দেশ্যে হিসাবে এটি একটি মৃতপ্রান্ত।
ডাবলজোশ

2

আপনি যদি কাস্টম ব্লক যুক্ত করে থাকেন তবে আপনি হুক_ব্লক_ইনফো ব্যবহার করে এটি করেন, স্থিতির বিকল্পটি 1 এ সেট করুন এবং আপনি যে অঞ্চলে ব্লকটি স্থাপন করতে চান সেই অঞ্চলে বিকল্পটি সেট করুন।

উদাহরণ:

MODULE_block_info() {
  $blocks = array();
  $blocks['my_block'] = array(
    'info' => t('My Block Name'),
    'status' => 1,
    'region' => 'THE_REGION_I_WANT',
   );
   return $blocks;
}

আপনি যদি ইতিমধ্যে বিদ্যমান ব্লকটি পরিবর্তন করতে চান, আপনি পরিবর্তে hook_ block_info_alter () ব্যবহার করবেন, নীচে একই বিকল্পগুলি আপডেট করে আপডেট করা হবে।

উদাহরণ:

MODULE_hook_block_info_alter(&$blocks, $theme, $code_blocks) {
  $blocks['my_block']['status'] = 1;
  $blocks['my_block']['region'] = 'THE_REGION_I_WANT';
}

আরও তথ্যের জন্য দেখুন https://api.drupal.org/api/drupal/modules%21 block%21 block.api.php/function/hook_ block_info/7


0

এই কোডটি @ জোনহাটনের উপর ভিত্তি করে তৈরি হয়েছে তবে তার ব্লক ধারকটি এইচটিএমএল বা প্রাসঙ্গিক লিঙ্কগুলি সরবরাহ করে না। আমি সমস্ত ব্লক এবং অঞ্চল এক জায়গায় নির্দিষ্ট করার একটি সহজ উপায়ও দিয়েছি।

<?php
/**
 * Implements hook_page_build().
 */
function MODULE_page_build(&$page) {
  global $theme;

  // A list of blocks you wish to display, keyed by region.
  // These are in the format of: 'module_name' => 'delta'.
  $blocks_to_render = array(
    'header' => array(
      'block' => 1,
    ),
  );

  // Add the blocks to each region.
  foreach ($blocks_to_render as $region => $block_list) {
    $block_objects = array();
    foreach ($block_list as $module_name => $delta) {
      $block = block_load($module_name, $delta);
      // Alter some of the defaults to match the current context.
      $block->theme = $theme;
      $block->region = $region;
      $block->weight = 0;
      $block_objects[] = $block;
    }
    $blocks_build = _block_get_renderable_array(_block_render_blocks($block_objects));

    if (isset($page[$region])) {
      $page[$region] = array_merge($page[$region], $blocks_build);
    }
    else {
      $page[$region] = $blocks_build;
    }
  }
}

দ্রষ্টব্য: তার কোডের মতো নয়, আপনার ব্লক.মডিউল ইনস্টল করা দরকার।


-1

এটি সর্বোত্তম ফর্ম নয়, কিন্তু আপনি করতে পারেন নিজে এই মত পৃষ্ঠা অ্যারের মধ্যে বিষয়বস্তু স্থান ...

function mymodule_page_alter(&$page) {
  $my_content = _mymodule_render_mycontent();
  $page['my_region']['my_special_insert']['content']['#markup'] = $my_content;
}

যদিও আপনার কনটেক্সট বা কেবলমাত্র মূল ব্লকগুলি ব্যবহার করতে হবে । নতুন প্লাগইনগুলি তৈরি করা যতটা খারাপ তা মনে হচ্ছে না। কেবল ফাইলগুলির নাম ঠিকঠাক করুন, ট্রিগার এবং একটি পরীক্ষা সেটআপ করুন। উদাহরণ


আসলে, দ্বিতীয় চিন্তায় আমি প্রায় এই সমাধানটি পোস্ট করার জন্য দুঃখিত। এটি করবেন না।
ডাবলজোশ

-1

আপনি আপনার থিমের ব্লকগুলি সামঞ্জস্য করতে পারেন যেমন:

/**
 * Implements hook_preprocess_page().
 */
function your_theme_preprocess_page(&$variables) {

  if (drupal_is_front_page()) {
    $variables['page']['region_one'] = $variables['page']['region_two'];
    unset($variables['page']['region_two']);
  }
}

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