it-swarm-vi.com

Làm thế nào để lập trình trang chủ?

Tôi muốn đặt Drupal trang đầu lập trình theo thời gian chạy.
Tôi có thể làm cái này như thế nào? Điều này có thể không?

22
Ek Kosmos

Bạn có thể sử dụng variable_set() cho điều đó.

variable_set('site_frontpage', $value);
22
Rafael Caceres

Có một mô-đun ( Frontpage , đây là mô-đun tôi duy trì) cho phép đặt một trang trước khác cho người dùng ẩn danh và người dùng được xác thực. Mô-đun cho phép các mô-đun của bên thứ ba thay đổi trang mà người dùng được chuyển hướng thay thế hoặc thay đổi mảng cấu trúc được sử dụng để hiển thị trang. Các mô-đun của bên thứ ba chỉ được phép thay đổi URL chuyển hướng khi trang trước cho ẩn danh hoặc xác thực chưa được đặt trong mô-đun Frontpage hoặc khi có lỗi trong quá trình tải nút; mô-đun có thể sẽ được thay đổi trong tương lai để cho phép các mô-đun của bên thứ ba chuyển hướng người dùng đến một trang cụ thể mà họ chọn.

Thay vào đó, bạn có thể tạo một mô-đun tùy chỉnh, sử dụng mã tương tự như mô-đun được sử dụng bởi Frontpage, chuyển hướng người dùng đến một trang cụ thể, dựa trên các tiêu chí cụ thể.

Mô-đun nên triển khai hook_menu () và liên kết một cuộc gọi lại menu, ví dụ, http://example.com/frontpage ; cuộc gọi lại trang của mục menu đó chỉ cần xác minh một điều kiện được xác minh và sau đó chuyển hướng người dùng đến một URL cụ thể.

Bộ xương mã có thể là một cái gì đó tương tự như sau:

/**
 * 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);
  }
}
16
kiamlaluno

Một giải pháp rất linh hoạt sẽ là sử dụng Tấm . Các màn hình khác nhau có thể được trình bày dựa trên bất kỳ tiêu chí nào và được điều khiển thông qua UI.

9
tim.plunkett

Tôi đã sửa như thế này:

/**
 * 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);
  }
}
4
r0ber

Mô-đun Rules cũng có thể được sử dụng để đặt frontpage "theo chương trình".

Quy tắc thực sự được tạo, sẽ là một biến thể của câu trả lời tại Chuyển hướng đăng nhập (xác thực) người dùng đến một trang đầu khác bằng cách sử dụng quy tắc hoặc mã php .

Và tùy ý kết hợp nó với mô-đun Flag , có thể có thể nâng cao hơn nữa trải nghiệm người dùng. Ví dụ: đối với người dùng đã đăng nhập để cho biết những trang đầu nào có thể họ coi là "yêu thích" của họ.

1
Pierre.Vriens

Nếu bạn đang tìm cách thiết lập chương trình này trên toàn cầu, bạn có thể đặt biến trong settings.php:

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

Tôi đã thay đổi nút trang chủ (trên các tên miền phụ) bằng cách cài đặt biến trong hook_url thừng ra_alter ()

variable_set('site_frontpage', $value);

Và sau đó chuyển hướng:

$_GET['q'] = 'node/' . $domain_homepage_node_id;
0
TvC