ฉันต้องการบล็อกในหน้าแรกเท่านั้น เนื่องจากฉันไม่มีโหนดและฉันต้องการให้หน้าแรกเป็น / โหนดฉันได้รับ "ยังไม่มีการสร้างเนื้อหาหน้าแรก" ข้อความบนหน้าของฉัน
ฉันจะรับสิ่งนี้ได้อย่างไร
ฉันต้องการบล็อกในหน้าแรกเท่านั้น เนื่องจากฉันไม่มีโหนดและฉันต้องการให้หน้าแรกเป็น / โหนดฉันได้รับ "ยังไม่มีการสร้างเนื้อหาหน้าแรก" ข้อความบนหน้าของฉัน
ฉันจะรับสิ่งนี้ได้อย่างไร
คำตอบ:
ใครจะเดาได้บ้าง มีโมดูลสำหรับสิ่งนั้น ตรวจสอบโมดูลหน้าว่างเปล่า ด้วยโค้ดเพียง 10 บรรทัดมันจะต้องเป็นหนึ่งในโมดูลที่ง่ายที่สุดที่นั่น
function MYTHEME_preprocess_page(&$vars) { if (drupal_is_front_page()) { unset($vars['page']['content']['system_main']['default_message']); //will remove message "no front page content is created" drupal_set_title(''); //removes welcome message (page title) }
MYTHEME
โดยMYMODULE
ใช่มั้ย?
คุณสามารถทำได้ในไฟล์เทมเพลตของธีม:
function MYTHEME_preprocess_page(&$vars) {
if (drupal_is_front_page()) {
unset($vars['page']['content']['system_main']['default_message']); //will remove message "no front page content is created"
drupal_set_title(''); //removes welcome message (page title)
}
}
วิธีแก้ปัญหา CSS อย่างรวดเร็วเพื่อซ่อน "ไม่มีข้อความเนื้อหา" เพียงแค่เพิ่มบรรทัดต่อไปนี้ในไฟล์ CSS ของคุณ:
#first-time {display:none;}
ข้อความ "ยังไม่มีการสร้างเนื้อหาหน้าแรก" ถูกแสดงจากการเรียกกลับหน้าสำหรับหน้าที่คุณใช้เป็นหน้าแรกnode_page_default ()ซึ่งมีรหัสต่อไปนี้
$select = db_select('node', 'n')
->fields('n', array('nid', 'sticky', 'created'))
->condition('n.promote', 1)
->condition('n.status', 1)
->orderBy('n.sticky', 'DESC')
->orderBy('n.created', 'DESC')
->extend('PagerDefault')
->limit(variable_get('default_nodes_main', 10))
->addTag('node_access');
$nids = $select->execute()->fetchCol();
if (!empty($nids)) {
$nodes = node_load_multiple($nids);
$build = node_view_multiple($nodes);
// 'rss.xml' is a path, not a file, registered in node_menu().
drupal_add_feed('rss.xml', variable_get('site_name', 'Drupal') . ' ' . t('RSS'));
$build['pager'] = array(
'#theme' => 'pager',
'#weight' => 5,
);
drupal_set_title('');
}
else {
drupal_set_title(t('Welcome to @site-name', array('@site-name' => variable_get('site_name', 'Drupal'))), PASS_THROUGH);
$default_message = '<p>' . t('No front page content has been created yet.') . '</p>';
// …
}
มันเป็นเพียงการส่งออกเพราะเว็บไซต์ไม่มีโหนด ข้อความไม่เกี่ยวข้องกับหน้าแรกที่มีบล็อก (หรือไม่มี)
หากคุณต้องการเก็บหน้าแรกนั้นไว้ แต่ไม่เห็นข้อความนั้นคุณสามารถใช้ฮุกต่อไปนี้ในโมดูล
function mymodule_page_alter(&$page) {
if (isset($page['default_message']['#markup']) && is_string($page['default_message']['#markup'])) {
$page['default_message']['#markup'] = strtr($page['default_message']['#markup'], '<p>' . t('No front page content has been created yet.') . '</p>', '');
}
}
ทางเลือกอื่นจะเพิ่มรหัสต่อไปนี้ในตอนท้ายของไฟล์ settings.php
$conf['locale_custom_strings_en'][''] = array(
'No front page content has been created yet.' => '',
);
หากคุณเปิดใช้งานภาษาอื่นในเว็บไซต์ของคุณคุณสามารถเพิ่มรายการที่คล้ายกันสำหรับแต่ละภาษา ตัวอย่างเช่นสำหรับภาษาอิตาลีรหัสที่จะป้อนจะเป็นรหัสต่อไปนี้ ( _en
ถูกแทนที่ด้วย_it
.)
$conf['locale_custom_strings_it'][''] = array(
'No front page content has been created yet.' => '',
);
ใช้วิธีนี้ "ยังไม่มีการสร้างเนื้อหาหน้าแรก" จะถูกแทนที่ในทุกสถานที่ที่ใช้ไม่ใช่แค่หน้าแรก โดยปกติแล้วสตริงนั้นจะใช้เฉพาะในหน้าแรกเมื่อหน้าแรกเป็นค่าเริ่มต้น ฉันไม่ทราบว่าโมดูลอื่นใดที่ใช้สตริงนั้น แต่ก่อนที่จะแทนที่สตริงนั้นด้วยสตริงว่างด้วย$conf['locale_custom_strings_en']['']
ฉันจะตรวจสอบว่าไม่มีโมดูลใด ๆ ที่เปิดใช้งานที่ใช้มัน (ยกเว้นโมดูลโหนด)
ฉันมีแม่แบบสำหรับโครงการใหม่ทั้งหมดที่มี:
นั่นแหล่ะฉันไม่ต้องจัดการกับหน้าโหนดเริ่มต้นที่แปลกประหลาดอีกเลย
นี่คือตัวอย่างที่เย็นเพื่อกำจัดข้อผิดพลาดนี้ได้โดยไม่เกิดความสับสนที่มีเนื้อหาอื่น ๆ ที่วางอยู่ในภูมิภาคเนื้อหา นี่จะซ่อนข้อผิดพลาดนี้เท่านั้นและแสดงเนื้อหาอื่นตามปกติ
ตัวอย่างนี้มีการโพสต์เมื่อลบ "ยังไม่มีการสร้างเนื้อหาหน้าแรก" ในการติดตั้ง Drupal เริ่มต้น
/**
* Implements template_preprocess_page().
*/
function YOUR_THEME_preprocess_page(&$vars) {
// Remove the "No front page content has been created yet.".
if (isset($vars['page']['content']['system_main']['default_message'])) {
unset($vars['page']['content']['system_main']['default_message']);
}
}
ขอ hook page.tpl.php ของคุณไปที่หน้า - front.tpl.php และทำทุกสิ่งที่คุณต้องการเพลิดเพลินไปกับ hooking :-)
ฉันไม่แน่ใจว่ามีวิธีการทำสิ่งนี้จากอินเทอร์เฟซผู้ดูแลระบบของ Drupal หรือไม่
วิธีหนึ่งที่จะบรรลุเป้าหมายนี้ที่ฉันรู้คือการเพิ่มคำสั่งของคุณif
page.tpl.php
ค้นหาบรรทัดที่ชอบ:
<?php print render($page['content']); ?>`
... และเปลี่ยนเป็น:
<?php if (!$is_front): ?>
<?php print render($page['content']); ?>
<?php endif; ?>
โดยทั่วไปจะพิมพ์เนื้อหาของหน้าหลักในทุกหน้าที่ไม่ใช่หน้าแรก แต่นี่อาจทำให้คุณมีช่องโหว่อยู่กลางหน้าเว็บของคุณ
ดังนั้นคุณอาจทำได้ดีในการปรับแต่งอื่น ๆ ของคุณpage.tpl.php
และอาจรวมถึงแท็กคอนเทนเนอร์โดยรอบเพิ่มเติม การแก้ไขเพิ่มเติมแผ่นโดยการวางส่วนหัวด้านบนแถบด้านข้างแรกสำหรับหน้าแรก:
<?php if ($is_front): ?>
<?php if ($title): ?>
<h1 class="title" id="page-title">
<?php print $title; ?>
</h1>
<?php endif; ?>
<?php endif; ?>
... และย้ายข้อความเริ่มต้นif
และวางไว้ในคอนเทนเนอร์เนื้อหา:
<div id="content" class="column">
<?php if (!$is_front): // Moved the if statement over here.... ?>
<div class="section">
<?php if ($page['highlighted']): ?>
<div id="highlighted"><?php print render($page['highlighted']); ?>
</div>
<?php endif; ?>
<a id="main-content"></a>
<?php print render($title_prefix); ?>
<?php if ($title): ?>
<h1 class="title" id="page-title">
<?php print $title; ?>
</h1>
<?php endif; ?>
<?php print render($title_suffix); ?>
<?php if ($tabs): ?>
<div class="tabs">
<?php print render($tabs); ?>
</div>
<?php endif; ?>
<?php print render($page['help']); ?>
<?php if ($action_links): ?>
<ul class="action-links">
<?php print render($action_links); ?>
</ul>
<?php endif; ?>
<?php print render($page['content']); ?>
<?php print $feed_icons; ?>
</div>
<?php endif; // ...and closed it here. ?>
</div> <!-- /.section, /#content -->
... ให้ผลลัพธ์ต่อไปนี้:
$page['content']
มันไม่จำเป็นที่จะลบเนื้อหาทั้งหมดของ
ฉันไม่รู้ว่าทำไมพวกคุณถึงยุ่งกันมาก (ดีฉันไม่ทราบว่า Abd วิธีการทำงาน แต่ในกรณีที่มันไม่ทำงานใช้วิธีแก้ไขด้านล่าง
ใน page.tpl.php คุณต้องค้นหาส่วนของรหัสนี้:
(ฉันมีนี่คือ Mine Adaptive Theme 7x-3.2)
<?php if ($title): ?>
<h1 id="page-title">
<?php print $title; ?>
</h1>
<?php endif; ?>
สิ่งที่คุณต้องทำคือลบมัน! ทุกเส้น
ส่วนหนึ่งของ PHP นี้พูดว่า:
หากมี "title" อยู่ให้พิมพ์ด้วยขนาดตัวอักษร H1 มันถูกพิมพ์บนเว็บไซต์ในพื้นที่รหัสที่เขียนในกรณีของชุดรูปแบบ Adaptive มันอยู่ในส่วนหัว
หากคุณไม่มี page.tpl.php ในหัวข้อย่อยของคุณคุณต้องค้นหาในธีมหลักแล้วคัดลอกไปยังตำแหน่งเดียวกันกับธีมหลักไปยังหัวข้อย่อยของคุณ
ใน AT คือ /templates/page.tpl.php
หมายความว่าในหัวข้อย่อยชุดรูปแบบ Adaptive ของคุณคุณต้องสร้างโฟลเดอร์ชื่อ "แม่แบบ" แล้วคัดลอกไปที่นั่น page.tpl.php แล้วลบส่วนของรหัสที่กล่าวถึงข้างต้น
เป็นสิ่งสำคัญที่คุณจะไม่ทำการเปลี่ยนแปลงใด ๆ กับธีมหลัก!
วางรหัสนี้ใน page.tpl.php
if(drupal_is_front_page()) {
unset($page['content']['system_main']['default_message']);
}
หรือ
unset($page['content']['system_main']['default_message']);
ในหน้า - front.tpl.php
คุณสามารถใช้String Overrides Module String Overridesเพื่อแทนที่
"ยังไม่มีการสร้างเนื้อหาหน้าแรกในหน้าแรก"ถึง""
ดีกว่าที่จะบรรลุงานนี้ไม่มีการตั้งค่า $page['content']['system_main']['default_message']
ในhook_preprocess_theme
หรือในหรือpage.tpl.php
page--front.tpl.php
หา
<?php print render($page['content']); ?>
และแทนที่ด้วยรหัสด้านล่าง
<?php if(drupal_is_front_page()){
unset($page['content']['system_main']['default_message']);
}
print render($page['content']);
?>
หรือ
function MYTHEME_preprocess_page(&$vars) {
if (drupal_is_front_page()) {
unset($vars['page']['content']['system_main']['default_message']); //will remove message "no front page content is created"
}
}
สนุก!!
ใน Drupal 8 เดียวกัน "ยังไม่มีการสร้างเนื้อหาหน้าแรก" จะปรากฏขึ้นเช่นทันทีหลังจากที่คุณสร้างเว็บไซต์ใหม่และไปที่หน้าแรก (หน้าแรก) แต่สิ่งต่าง ๆ ได้ง่ายขึ้นหากคุณต้องการแทนที่หรือลบมัน ... สิ่งที่จำเป็นคือ:
/admin/structure/views/view/frontpage
(เพื่อแก้ไขมุมมองชื่อ "Frontpage")หากต้องการตรวจสอบการเปลี่ยนแปลงของคุณให้เรียกดูหน้าแรก หากจำเป็นต้องทำซ้ำขั้นตอนข้างต้นเพื่อปรับแต่งข้อความเพิ่มเติม