Egyéni hibaüzenet

szt képe

Üdv!
Vannak az inaktív (blocked) felhasználók, akiknek a user1-en kívül senki nem tudja megnézni az adatait a user/uid oldalon, még ha be is kattintjuk a "View user profiles" jogot. Ez jó is így, de én az "Access denied: You are not authorized to access this page." üzenet helyett szeretnék egy egyéni üzenetet mutatni ilyenkor (pl. "Sorry, this is a blocked user.").
Merre induljak el?
Köszi!

Drupal verzió: 
szt képe

A Rules modullal közelebb jutottam a megoldáshoz.
Van egy olyan event, hogy "User account page is viewed" és egy olyan condition, hogy "User is blocked".
De ez csak az adminnak fut le, mert a "User account page is viewed" esemény nem tud lefutni, ha nincs egy usernek jogosultsága...
Meg lehet ezt oldani kattintósan?

0
0
szt képe

A Context error modul egy másik irány, de ez meg nem tudja megmondani, hogy "miféle" 403-as oldalon vagyok, azaz hogy honnan kerültem ide. Tényleg, egyáltalán meg lehet mondani, hogy honnan kerültem a 403-as oldalra?

0
0
snufkin képe

nem igazan, drupal ilyenkor a drupal_access_denied()-et hasznalja. esetleg azt lehet csinalni, hogy felulirod az access es page callbackeket a user/%user path-ra. Mindenkinek adsz hozzaferest, es a page callbackbol a sajat uzeneteded adod vissza, ha a juzer blokkolt, ha meg nem akkor amit a user module alapbol visszaadna.

1
0
szt képe

„felulirod az access es page callbackeket a user/%user path-ra.”

Ezt saját modulban kell? Milyen függvénnyel?

0
0
csg képe

Saját modul kell, és bele két függvény. Az egyikkel elérjük, hogy a mi másik függvényünk fusson le a user/%user útvonalon:

  1. /*
  2.  * Implementation of hook_menu_alter().
  3.  */
  4. function modulname_menu_alter(&$items) {
  5. $items['user/%user']['access callback'] = TRUE;
  6. $items['user/%user']['page callback'] = 'modulname_landingpage';
  7. }

A másik pedig az adminnak megmutatja a user oldalt, a többieknek pedig kiír egy általunk megadott a szöveget.

  1. /*
  2.  * User landing page.
  3.  *
  4.  * If the account is blocked, show the user page to the admin,
  5.  * and display a warning to others.
  6.  */
  7. function modulname_landingpage() {
  8. global $user;
  9. $account = user_load(1);
  10. if ($account->status === 0 && in_array('administrator', $user->roles)) {
  11. return user_view_page($account);
  12. }
  13. else {
  14. drupal_set_title(t('Go away'));
  15. return t('Sorry, this is a blocked user.');
  16. }
  17. }

Nem teszteltem, lehet benne hiba. A működésbe léptetéshez a gyorstárat üríteni kell, hogy a menü újraépüljön.

1
0

--
Csonka Gergely
http://cheppers.com