Bagaimana cara mengatur halaman depan secara terprogram?

22

Saya ingin mengatur halaman depan Drupal secara terprogram saat dijalankan.
Bagaimana saya bisa melakukan ini? Apakah ini mungkin?

Ek Kosmos
sumber

Jawaban:

22

Anda bisa menggunakannya variable_set()untuk itu.

variable_set('site_frontpage', $value);
Rafael Caceres
sumber
18
Ini benar, tetapi itu bukan sesuatu yang harus dilakukan terlalu sering atau berdasarkan tindakan penggunaan. Panggilan variable_set () selalu menghasilkan "cache_clear_all ('variabel', 'cache_bootstrap');" jadi permintaan selanjutnya perlu mengambil kembali variabel dan informasi bootstrap dari database.
Berdir
1
@Berdir - ini mempengaruhi kinerja situs Anda?
Ek Kosmos
7
Ya, itu akan memengaruhi kinerja, cache_bootstrap berisi banyak cache yang hanya akan dibangun kembali seiring berjalannya waktu, misalnya implementasi hook. Solusi alternatif akan menggunakan Tampilan, Panel atau modul khusus untuk menampilkan konten secara dinamis di halaman depan. Misalnya, Anda bisa membangun tampilan untuk menunjukkan simpul terbaru dari jenis konten dan kemudian arahkan site_frontpage ke sana.
Berdir
Menggunakan ini dalam hook_installatau hook_update_Nkemudian harus baik-baik saja.
leymannx
16

Ada modul ( Frontpage , yang merupakan salah satu yang saya kelola) yang memungkinkan untuk mengatur halaman depan yang berbeda untuk pengguna anonim, dan pengguna terotentikasi. Modul ini memungkinkan modul pihak ketiga untuk mengubah halaman yang diarahkan pengguna, atau mengubah susunan struktur yang digunakan untuk membuat halaman. Modul pihak ketiga diizinkan untuk mengubah URL pengalihan hanya ketika halaman depan untuk anonim atau dikonfirmasi belum diatur dalam modul Frontpage, atau ketika ada kesalahan selama pemuatan node; modul mungkin akan diubah di masa depan untuk memungkinkan modul pihak ketiga mengarahkan pengguna ke halaman tertentu yang mereka pilih.

Sebagai alternatif, Anda dapat membuat modul khusus yang, menggunakan kode yang mirip dengan yang digunakan oleh Frontpage, mengarahkan pengguna ke halaman tertentu, berdasarkan kriteria tertentu.

Modul harus mengimplementasikan hook_menu () dan mengaitkan panggilan balik menu ke, misalnya, http://example.com/frontpage ; panggilan balik halaman dari item menu tersebut harus cukup memverifikasi suatu kondisi diverifikasi, dan kemudian mengarahkan pengguna ke URL tertentu.

Kerangka kode bisa mirip dengan yang berikut ini:

/**
 * Implements hook_menu().
 */
function mymodule_menu() {
  $items = array();

  $items['frontpage'] = array(
    'page callback' => 'mymodule_frontpage_view',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,
  );

  return $items;
}

function mymodule_frontpage_view() {
  // These variables can be useful to redirect the users
  // to specific pages, basing on the language currently set for
  // the content, or on the fact the user is logged in.
  $langcode = $GLOBALS['language_content']->language;
  $logged_in = user_is_logged_in();

  if ($condition) {
    drupal_goto($redirect);
  }
}
kiamlaluno
sumber
9

Solusi yang sangat fleksibel adalah dengan menggunakan Panel . Tampilan yang berbeda dapat disajikan berdasarkan kriteria apa pun, dan dikendalikan melalui UI.

tim.plunkett
sumber
4

Saya tetap seperti ini:

/**
 * Implements hook_page_alter.
 * @param type $page
 */
function my_module_page_alter(&$page){
  global $user;

  $is_fron_page = drupal_is_front_page();
  if($is_fron_page && $user->uid){
    $redirect = 'users/'.$user->name.'/my-argument';
    drupal_goto($redirect);
  }
}
r0ber
sumber
1
Halo. Anda senang membagikan kode Anda. Akan lebih baik jika Anda bisa memberi tahu kami bagaimana tepatnya kode Anda memperbaikinya. Anda tahu, alasan orang lain dapat mengikuti jika karena alasan tertentu kode yang disalin tidak akan bekerja untuk mereka.
Mołot
@molot - metode ini, yang harus ditambahkan ke modul khusus Anda, mengimplementasikan hook_page_alter, dan menggunakan drupal_is_front_pageuntuk mengarahkan ulang pengguna, menggunakan drupal_goto, berdasarkan pada beberapa kondisi (dalam hal ini $ user-> uid tidak boleh 0)
commonpike
@commonpike bukan karena saya tidak memahaminya. Komentar saya adalah tentang kualitas jawaban secara keseluruhan, dan khususnya kegunaannya untuk pengguna baru yang belum berpengalaman.
Mołot
1

The Rules modul dapat digunakan juga untuk mengatur frontpage "programatik".

Aturan sebenarnya yang akan dibuat, akan menjadi variasi dari jawaban di Redirect yang masuk (diautentikasi) pengguna ke halaman depan yang berbeda menggunakan aturan atau kode php .

Dan secara opsional menggabungkannya dengan modul Bendera , mungkin dapat lebih meningkatkan pengalaman pengguna. Misalnya untuk pengguna yang masuk untuk menunjukkan halaman depan mana yang mungkin mereka anggap sebagai "favorit" mereka.

Pierre
sumber
1

Jika Anda ingin menetapkan ini secara terprogram secara global, Anda dapat mengatur variabel di settings.php:

$conf['site_frontpage'] = 'some/custom/path';
Charlie Schliesser
sumber
0

Saya telah mengubah simpul beranda (pada subdomain) dengan menyetel variabel dalam hook_url_outbound_alter ()

variable_set('site_frontpage', $value);

Dan kemudian mengarahkan:

$_GET['q'] = 'node/' . $domain_homepage_node_id;
TVC
sumber