টেমপ্লেটপ্রেসপ্রসেস_পৃষ্ঠা () ব্যবহার করে নোডের ভিত্তিতে পৃষ্ঠা শিরোনামটি কীভাবে আড়াল করবেন?


10

আমি বর্তমান পৃষ্ঠার শিরোনামটি আড়াল করার চেষ্টা করছি (মুদ্রিত হিসাবে page.tpl.php) যদি বর্তমান পৃষ্ঠা 1 হয়) সম্পূর্ণ ডিসপ্লেতে একটি নোড (টিজার মোডের বিপরীতে), এবং 2) নোড টাইপ হয় কনসার্ট বা বায়ো । আমি এই বিষয়বস্তুর জন্য নোড শিরোনামটি সরাসরি নোড সামগ্রীতে প্রিন্ট করি, তাই আমি ডুপ্লিকেটটি পৃষ্ঠা.tpl.php দ্বারা মুদ্রিত করে আড়াল করতে চাই। আমি পেইজ.টপিএলপিপি-তে সরাসরি এটি কাজ করতে সক্ষম নই এবং আমার পাঠ্যপুস্তকটি প্রস্তাব দেয় যে প্রিপ্র্রোসেস এবং প্রক্রিয়া ফাংশনগুলি ব্যবহার করে টেমপ্লেট.এফপি তে টেম্পলেট যুক্তি পরিচালনা করা সর্বোত্তম অনুশীলন। সুতরাং, আমি ব্যবহার করে বর্তমান পৃষ্ঠার শিরোনামটি (উপরের 2 শর্ত সহ) লুকিয়ে রাখার চেষ্টা করছি template_preprocess_page()। এটি আমার কোড।

<?php
    function MYTHEME_preprocess_page(&$variables) {
        if (!empty($variables['node']) && $variables['node']->type == 'concert') {
            hide($variables['title']);
        }
    }
?>

আমি পড়েছি টেমপ্লেট.এফপি থেকে কোনও ভেরিয়েবল মুদ্রণের জন্য নোড টাইপের জন্য আমি কীভাবে পরীক্ষা করব? এবং ডকুমেন্টেশন পৃষ্ঠা template_preprocess_page()এবং অন্যান্য বিভিন্ন সাইটের জন্য, তবে আমি কেবল এটি কাজ করে বলে মনে করতে পারি না। আমি নোড টাইপ পরীক্ষা isset()করার $variables['node']আগে আপনাকে কল করতে হবে এমন পরামর্শগুলি দেখেছি , তবে এটি কার্যকর হয়নি। আমি কোথাও পোস্ট করা সুস্পষ্ট সমাধান দেখতে পাইনি এবং আমি আমার বুদ্ধিমানের শেষে এসেছি।

উত্তর:


9

এবং আমার পঠনটি প্রস্তাব দেয় যে সর্বোত্তম অনুশীলন হ'ল টেমপ্লেট যুক্তিগুলি হ'ল টেম্পলেট.এফপিতে প্রিপ্রোসেস এবং প্রক্রিয়া ফাংশনগুলি ব্যবহার করে handle

রেন্ডারিং কোড থেকে লজিক ডিকোপলিংয়ের অর্থ সহজভাবে টেমপ্লেট.এফপি মধ্যে কোডটি একটি ভেরিয়েবল সেট করে যা টেমপ্লেট ফাইলে চেক করা হয়। এইভাবে, যুক্তিটি সমস্ত টেম্পলেট.এফপি ফাইলের মধ্যে রয়েছে, যখন রেন্ডারিং কোডটি সমস্ত টেম্পলেট ফাইলগুলিতে থাকে।

template.php

function mytheme_preprocess_page(&$variables) {
  if (!empty($variables['node']) && $variables['node']->type == 'concert') {
    $variables['show_title'] = FALSE;
  }
}

page.tpl.php

<?php if ($show_title && $title): ?><h1 class="title" id="page-title"><?php print $title; ?></h1><?php endif; ?>

hide()কাজ করে না কারণ $variables['title']একটি স্ট্রিং, রেন্ডারিং অ্যারে নয়। hide()সর্বদা একটি রেন্ডারিং অ্যারে ব্যবহার করা হয় এবং স্ট্রিংটি পাস করার পরেও তার কোনও স্ট্রিংয়ের সাথে কোনও প্রভাব হয় না render()
প্রকৃতপক্ষে, একটি স্ট্রিং (বা কোনও মান যা কোনও অ্যারেযুক্ত কোনও ভেরিয়েবলের সাথে সম্পর্কিত নয়) কে hide()পিএইচপি ত্রুটির কারণ হতে পারে, যেহেতু ফাংশনটি এই কোডটি ব্যবহার করে।

function hide(&$element) {
  $element['#printed'] = TRUE;
  return $element;
}

Unsetting $variables['title']সঙ্গে unset($variables['title'])খুব কাজ করে না, যেমন template_process_page()থেকে শিরোনামটি পেতে হবে drupal_get_title()

if (!isset($variables['title'])) {
  $variables['title'] = drupal_get_title();
}

অবশ্যই আপনার প্রকৃত পরিবর্তন হতে পারে $titleসঙ্গে পরিবর্তনশীল mytheme_process_page(&$variables) { $title = false; }
রবডাব্লু

4
@ রবডব্লু যা হবে mytheme_process_page(&$variables) { $variables['title'] = false; }এবং এটি বিটিডব্লিউ কাজ করে।
ডানকানমু

এ সম্পর্কে আরও একটি নোট; যতদিন আপনার থিম গোপন হিসাবে <?php print $title; ?>মধ্যে <?php if (!$title_hidden): ?>আপনি কেবল সেট করতে পারেন$variables['title_hidden'] = TRUE;
Duncanmoo

2

আপনি এটি drupal_set_title () ব্যবহার করে পরিচালনা করতে পারেন।

function mytheme_preprocess_page(&$vars){
    if (isset($vars['node']) && $vars['node']->type == 'news'){
        drupal_set_title('');
    }
}

এটি আমার পক্ষে কাজ করে না। অন্য কিছু ওভাররাইডিং হতে পারে template_preprocess_page()? আমি ডুপ্লিকেট শিরোনামটি পরিদর্শন করা থিম ডেভেলপার মডিউল ব্যবহার করা হয় এবং নিশ্চিত করেছে যে তা থেকে বলা হচ্ছে থাকেন page.tpl.php। আমি কি শিরোনামটি মুছে ফেলার বিষয়ে ভাবি page.tpl.phpএবং তারপরে যেখানে এটি ব্যবহার করতে চাই সেখানে যুক্ত করে ফেলি template_preprocess_page()? আমি শিরোনামটি রেন্ডার করতে চাই, উদাহরণস্বরূপ, যখন পৃষ্ঠাটিতে নোডের একটি ভিউ থাকে তবে পৃষ্ঠাটি নির্দিষ্ট ধরণের / প্রকারের একক নোডের নয়।
diekunstderfuge

1
এটি স্ক্রিন রিডারগুলি ব্যবহার করে দর্শকদের গুরুত্বপূর্ণ তথ্যও ছিনিয়ে নিতে পারে। এটি ব্যবহারকারীদের ট্যাবে পৃষ্ঠার শিরোনামও সরিয়ে দেয়। শুরু থেকে অ্যাক্সেসিবিলিটি ভাবেন।
রিক

1

শর্তটি ঠিক থাকলে অনুমান করে চেষ্টা করুন :)

 function MYTHEME_preprocess_page(&$variables) {
        if (!empty($variables['node']) && $variables['node']->type == 'concert') {
            unset($variables['title']);
        }
    }

এটি কাজ করে না: টেমপ্লেট_প্রসেস_পেজ ()$variables['title'] থেকে ফিরে আসা মানটি সেট করবে drupal_get_title()
কিমলালুনো

0

কম জটিল উপায় হ'ল এটি আপনার পেজ.tpl.php এ মুদ্রণ করে

<?php hide($title); ?>

তবে আপনি যদি এটি গতিশীল হতে চান তবে আমি preprocess_pageঅন্যদের পরামর্শ মতো ব্যবহার করার পরামর্শ দেব ।


1
এটি কাজ করে না। hide()স্ট্রিং নয়, রেন্ডারিং অ্যারে ব্যবহার করা হয়।
কিমলালুনো

0

সিএসএসে, আমি আমার থিমটিতে এটি করেছি

/*    Front Page - hide title  */
body.front header h1 {
 position: absolute; 
 left: -999em;    
}

যেমনটি http://www.alistapart.com/articles/now-you-see-me/ দ্বারা প্রস্তাবিত

কেন? আপনি এখনও অ্যাক্সেসযোগ্যতার জন্য শিরোনাম এবং স্ক্রিন পাঠকদের কাছে এইচ 1 'দৃশ্যমান' রাখতে চান। আপনি যদি এইচ 1 এর মানটি সহজেই সরিয়ে ফেলেন তবে আপনি আপনার অন্ধ এবং নিম্ন দর্শকদের কিছু সম্ভাব্য গুরুত্বপূর্ণ তথ্যের ছিনতাই করছেন।


এটি কাজ করবে না। কেন? কারণ আপনি প্রোগ্রামিং সাইট এন এর সাহায্য ছাড়াই শর্তযুক্ত সিএসএস যোগ করতে পারবেন না
আয়শক

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

0

মাইথিম_প্রিপ্রসেস_পেজের পরামর্শটি আমার পক্ষে কাজ করে তবে যদি এটি ব্যবহৃত হয়$vars['title_hidden'] = TRUE;

function mytheme_preprocess_page(&$vars) {
  if (isset($vars['node']->type) && $vars['node']->type == 'type') {
    $vars['title_hidden'] = TRUE;
  }
}

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