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


22

Tôi muốn đặt trang nhất của Drupal theo chương trình vào 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?

Câu trả lời:


22

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

variable_set('site_frontpage', $value);

18
Điều này là chính xác, nhưng đó không phải là điều nên được thực hiện quá thường xuyên hoặc dựa trên hành động sử dụng. Cuộc gọi biến_set () luôn dẫn đến "cache_clear_all ('biến', 'cache_bootstrap');" vì vậy yêu cầu tiếp theo sẽ cần tìm nạp lại các biến và thông tin bootstrap từ cơ sở dữ liệu.
Berdir

1
@Berdir - điều này ảnh hưởng đến hiệu suất trang web bằng cách nào đó?
Ek Kosmos

7
Có, nó sẽ ảnh hưởng đến hiệu suất, cache_bootstrap chứa nhiều bộ đệm sẽ chỉ được xây dựng lại theo thời gian, ví dụ như triển khai hook. Các giải pháp thay thế sẽ là sử dụng Chế độ xem, Bảng hoặc mô-đun tùy chỉnh để hiển thị động nội dung trên trang trước. Ví dụ: bạn có thể xây dựng chế độ xem để hiển thị nút gần đây nhất của loại nội dung và sau đó trỏ trang web_frontpage vào đó.
Berdir

Sử dụng điều này trong một hook_installhoặc hook_update_Nsau đó sẽ tốt.
leymannx

16

Có một mô-đun ( Frontpage , một trang 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);
  }
}

9

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 giao diện người dùng.


4

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);
  }
}

1
Xin chào. Rất vui được chia sẻ mã của bạn. Sẽ còn đẹp hơn nữa nếu bạn có thể cho chúng tôi biết chính xác mã của bạn sửa nó như thế nào. Bạn biết đấy, lý do người khác có thể làm theo nếu vì lý do nào đó mã dán sao chép sẽ không hiệu quả với họ.
Mołot

@molot - phương pháp này, nên được thêm vào mô-đun tùy chỉnh, thực hiện hook_page_altervà sử dụng drupal_is_front_pageđể chuyển hướng người dùng, sử dụng drupal_goto, dựa trên một số điều kiện (trong trường hợp này $ user-> uid không nên là 0)
phổ biến vào

@commonpike không phải là tôi không hiểu nó. Nhận xét của tôi là về chất lượng của câu trả lời, và cụ thể là tính khả dụng của nó đối với người dùng mới, thiếu kinh nghiệm.
Mołot

1

Các quy tắc mô-đun có thể được sử dụng để thiết lập cũng frontpage "programatically".

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 Redirect đã đăng nhập (xác thực) người dùng vào 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

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';

0

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;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.