Nơi dường như tự nhiên để làm điều này sẽ là OutputPage::showPermissionsErrorPage(). Cụ thể, thông báo lỗi thực tế sẽ được hiển thị trong hai dòng sau:
$this->prepareErrorPage($this->msg('loginreqtitle'));
$this->addHTML($this->msg($msg)->rawParams($loginLink)->parse());
Để chuyển hướng trực tiếp đến Special: UserLogin, bạn có thể thay thế bằng một cái gì đó như thế này (chưa được kiểm tra!) Mã:
$this->redirect(SpecialPage::getTitleFor('Userlogin')->getFullURL($query));
Than ôi, có vẻ như không có bất kỳ thuận tiện hook tại chỗ mà sẽ cho phép bạn làm điều này từ một phần mở rộng, do đó, có vẻ như bạn sẽ phải nghỉ mát để vá mã. Điều này trông giống như một nơi tự nhiên cho một cái móc, vì vậy nó có thể không phải là một ý tưởng tồi để file a feature request yêu cầu móc như vậy được thêm vào.
(Ngoài ra, bạn thực sự có thể xuất biểu mẫu đăng nhập tại chỗ, nhưng điều đó có thể phức tạp hơn một chút để thực hiện hơn là chỉ chuyển hướng đến Đặc biệt: UserLogin. Xem nhanh, tôi không thể tìm thấy bất kỳ "outputLoginForm()" thuận tiện nào để gọi trong số Special:UserLogin code và mặc dù không khó để tự tạo biểu mẫu đăng nhập phù hợp, điều đó có nghĩa là bất kỳ thay đổi nào sau đó đối với biểu mẫu có thể làm hỏng khả năng tương thích.)
Nguồn
2012-06-21 21:18:59
Cảm ơn! Nó hoạt động như mong đợi. Nhưng điều này sẽ không hiển thị trang userLogin cho mọi quyền hạnGọi không? Điều gì xảy ra nếu điều này được gọi cho một hành động không đủ quyền? –
Nếu bạn nhìn vào các chú thích ở trên cùng của hàm, bạn sẽ lưu ý rằng đường dẫn mã cụ thể chỉ được thực hiện cho trường hợp cụ thể mà người dùng không đăng nhập và có vẻ như việc đăng nhập sẽ khắc phục lỗi. Vì vậy, bạn nên ổn, các lỗi quyền khác sẽ vẫn hoạt động như bình thường. Nếu bạn muốn chắc chắn, bạn có thể bảo vệ một trang và cố gắng chỉnh sửa trang đó với tư cách là người dùng không phải quản trị viên. Hoặc chặn IP của bạn trong một phút. –
Cảm ơn, chỉ là vấn đề nhỏ, các liên kết trong câu trả lời của bạn [OutputPage :: showPermissionsErrorPage()] (https://gerrit.wikimedia.org/r/gitweb?p=mediawiki/core.git;a=blob;f=includes /OutputPage.php#l2063) và [Special: UserLogin code] (https://gerrit.wikimedia.org/r/gitweb?p=mediawiki/core.git;a=blob;f=includes/specials/SpecialUserlogin.php ; h = 13ea5def2ec3e4d9a363440f757675b0099c49e8; hb = refs/heads/REL1_19) không hoạt động nữa. Có thể thay đổi thành https://github.com/wikimedia/mediawiki/blob/master/includes/OutputPage.php#L2454? – escalator