it-swarm-id.com

Bagaimana cara mengarahkan ke simpul tertentu dari halaman depan di Drupal 7?

Saya memiliki situs multi-bahasa yang dibuat di Drupal 7. Dan saya ingin memeriksa apakah saya ada di halaman depan lalu apakah benar untuk mengarahkan pengguna ke beberapa node tertentu.

Saya telah mencoba berbagai metode:

  1. untuk membuat halaman front--page.tpl.php dan kemudian untuk memeriksa bahasa lalu mengarahkan ulang
  2. Saya telah memasukkan kode ini dalam page.tpl.php:

     global $language;
    
     if ($node->nid == 1) {
         if ($language->language == "en") {
             header('Location: en/home');
         } elseif ($language->language == "fr") {
             header('Location: fr/accueil');
         }
     }
    
  3. Saya menggunakan modul i18n untuk Drupal 7 jadi saya telah mencoba juga untuk menggunakan $conf['i18n_variables'] di settings.php seperti itu:

      $conf['i18n_variables'] = array(
         'site_frontpage',
         'site_name',
      );
    

Tetapi saya belum berhasil melakukannya. Apakah Anda punya saran?

6
Ek Kosmos

page - front.tpl.php memungkinkan Anda membuat template halaman berbeda dari template default page.tpl.php. Ketika drupal memuat beranda dan ada halaman - front.tpl.php itu akan menghapus template itu sebagai gantinya.

Jika Anda ingin memeriksa apakah Anda berada di beranda Anda dapat menggunakan variabel is_front. Akan lebih baik menggunakan hook_boot dalam modul khusus.

hook_boot(&$vars) {
  if($vars['is_front']) {
    // do your redirect
  }
}

Anda dapat menggunakan drupal_goto () untuk menangani arahan ulang.

7
Jepedo

Menggunakan modul kustom yang mengimplementasikan penangan menu untuk "frontpage", misalnya, dimungkinkan untuk mengatur halaman depan Default ke "frontpage".

Modul kemudian harus mengimplementasikan hook_menu() dan penangan halaman, mirip dengan kode berikut:

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

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

  return $items;
}

/**
 * Menu callback; shows the frontpage node.
 */
function mymodule_view() {
  $langcode = $GLOBALS['language']->language;

  if ($langcode == "en") {
    drupal_goto('en/home');
  }
  elseif ($langcode == "fr") {
    drupal_goto('fr/accueil');
  }
}
4
kiamlaluno

Saya akan menggunakan hook_boot:

module_boot() {
  global $language;
  if (drupal_is_front_page() && $language->language == 'XX') {
    drupal_goto('node/[NID]');
  }
}

Ini masih awal dalam proses, jadi harus lebih cepat dan menggunakan lebih sedikit sumber daya, daripada melakukannya dalam fungsi tema.

1
googletorp

Mengapa tidak mengatur nilai halaman depan default (the site_frontpage variabel) di Administrasi "Konfigurasi" Sistem "Informasi situs ke simpul/[NID]? Jika Anda menginginkan simpul yang berbeda untuk bahasa yang berbeda, pertahankan site_frontpagedi i18n_variables dalam pengaturan.php dan kunjungi halaman Informasi Situs dalam setiap bahasa.

1
Pierre Buyle

Tidak perlu kode. Pergi ke Informasi Konfigurasi-Situs Di sana, Anda dapat menemukan 'Halaman depan default', cukup masukkan tautan dari simpul yang ingin Anda dapatkan.

1
Amaral

Saya membuat modul (kotak pasir) untuk melakukan hal ini, Redirect halaman depan :

Drupal memungkinkan Anda menentukan konten apa yang akan ditayangkan di beranda. Namun, Drupal tidak mengarahkan pengunjung ke halaman itu tetapi hanya menyajikan konten halaman itu di halaman depan).
...
Untuk mengatasi masalah ini, modul ini benar-benar mengarahkan kembali pengunjung yang tiba di halaman depan ke halaman yang didefinisikan sebagai halaman depan. Itu melakukannya menggunakan kode status 301 (Pindah Permanen).

1
fietserwin

solusi googletorp tidak akan berfungsi apa adanya.

Jika Anda mencoba menggunakan drupal_is_front_page() dalam hook_boot Anda akan mendapatkan kesalahan karena pustaka fungsi bahkan belum dimuat sampai setelah boot.

Inilah mengapa EK Kosmos mendapatkan layar kosong (mengapa ada orang yang berkembang dengan pesan kesalahan dimatikan?).

Sebuah solusi adalah dengan menggunakan hook_boot() , seperti yang disarankan, tetapi untuk mengevaluasi langsung dari url apakah itu halaman depan atau tidak.

1
Webdesigner007

Untuk pengalihan, Anda tidak perlu membuat halaman untuk itu Anda harus menggunakan hook_boot alih-alih hook_menu. Di hook_boot Anda tidak memiliki akses ke semua fungsi Drupal jadi saya mencoba sebanyak mungkin tetap dengan fungsi asli PHP.

/**
 * hook_boot
 */
function modulename_boot() {
  // Check if it's the front page
  // using hook_boot we avoid wasting resources
  // It's to early to use drupal_is_front_page and we should avoid loading unnecessary extra resource
  if ($_GET['q'] == '') {
    // http_negotiate_language() is a better option but require  pecl_http >= 0.1.0
    // Locale::acceptFromHttp() require intl extension
    $langBrowser = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);

    // Get the activated languages on your drupal site
    $langAvailable = language_list();

    // set a default in case the language is not avaible
    $lang = 'en';

    if(isset($langAvailable[$langBrowser]) ){
      $lang = $langAvailable[$langBrowser]->prefix;
    }

    $http_response_code = 302;
    header('Location: ' . $lang, TRUE, $http_response_code);

    drupal_exit();
  }
}
0
gagarine