Oldalelemek eltávolítása sminken keresztül

ipeto képe

Sziasztok!

Egy felhasználói profiloldalról kellene néhány elemet eltávolítanom. Odáig sikerült eljutni, hogy a preprocess_html() függvénynnyel beleraktam a body-ba egy egyedi azonosítót, így ha másképp nem megy, css-sel el lehet rejteni a szükségtelen dolgokat.
Azt viszont nem sikerült kitalálnom, hogyan tudnám eleve kizárni ezeket az elemeket, hogy bele se kerüljenek a kódba. A preprocess_html() $variables változója tartalmazza ezeket, de sok keresgélés után sem találtam meg, hogyan tudnám pl. a $variables['page']['content']['system_main']['profiloldal'] tömbből a #title elemet kivenni. Nyilván egyszerű szintaktikai hibáról van szó, de nem jövök rá a megoldásra...

Fórum: 
eager képe

Úgy tűnik, hogy a $title-t a template_process_page()-ben lehet kiiktatni. Ettől a page.tpl.php nem printel oda semmit.

A kihívás nekem abban áll, hogy megbízhatóan és szépen sikerüljön beazonosítani, ha profiloldalon vagyunk (könnyen lehet, hogy az alábbi se nem szép, se nem eléggé megbízható...).

Ezt sikerült összehozni:

  1. function MYTHEME_process_page(&$variables) {
  2.  
  3. // An attempt to tell if we are on the user profile page.
  4. if (!empty($variables['page']['content']['system_main']['#theme']) &&
  5. $variables['page']['content']['system_main']['#theme']== 'user_profile') {
  6.  
  7. // Unsetting the title with setting to an empty string.
  8. // The page.tpl.php won't print anything.
  9. $variables['title'] = '';
  10. }
  11. }

EDIT:

Ja igen, szóval hogy keletkezik nálad a

$variables['page']['content']['system_main']['profiloldal']

tömb? Én a template_preprocess_html() variabléi között hasonlót sem találtam (odáig megvan, hogy 'system_main', de abban semmi ilyen használhatóbb dolog, semmi, ami #title-t, vagy akár hasonlót tartalmazna). (Másik dolog, hogy a preprocess_html()-ben nem tudom, hogy hogyan kell olyat tenni, aminek a hatását aztán a template_process_page()-ben is látom, hogy ott feltételként tudjam használni.)

Ha valaki tudna elegánsabb megoldást, azt szívesen megismerném.

1
0
ipeto képe

Ez a title nem az a title :) Ez úgy tűnik, határozottan a preprocess_html()-ben van. A $variables['page']['content']['system_main']['profiloldal_neve'] tömb a profiloldalt-típus címét (pl. eladói profil) írja le, egyfajta alcímként jelenik meg a képernyőn. Nálam a #type #title, #prefix elemeket (ezekre nincs szükség) ill. egy view tömböt (a profiladatok) tartalmazza.

De majd az profiloldal címét is ki kell kapcsolni, tehát valóban szükség lesz a preprocess_page()-re is. A két függvény közötti kapcsolat megteremtéséhez ezt találtam keresgélés közben.

1
0
eager képe

Köszi a variable-passzolós dolgot!

Olvastam, hogy ezen a ponton különösen izgalmas, hogy milyen sorrendben futnak le ezek, úgyhogy mindenhova betettem egy-egy drupal_set_message()-t, azt remélve, hogy a message-k sorrendje elárulja a feldolgozás sorrendjét. (A template_ kezdetűek az /includes/theme.inc-ben vannak definiálva.)

Ezt kaptam:

  • SMINK process_page
  • template_preprocess_html
  • SMINK preprocess_html
  • template_process_html
  • SMINK process_html
  • template_preprocess_page
  • SMINK preprocess_page
  • template_process_page

Aztán belekevertem a node-ot is, mert van hogy abban van valami fontos infó, amire jó lenne alapozni dolgokat... (a template_ kezdetű a /modules/node/node.module-ban definiálva).

  • SMINK process_page
  • template_preprocess_node
  • SMINK preprocess_node
  • SMINK process_node // Érdekes, ilyet senki nem definiál eredetileg.
  • template_preprocess_html
  • SMINK preprocess_html
  • template_process_html
  • SMINK process_html
  • template_preprocess_page
  • SMINK preprocess_page
  • template_process_page
1
0
pp képe

Theme Developer + Devel modulok kellenek neked. Már ha nem Views-ról van szó, mert akkor pedit a views beállító felület Advanced fül jobb legalján található Theme information menüpontban találod meg a választ a kérdésedre.

pp

2
0
ipeto képe

Köszi mindenkinek a tippeket, azt hiszem, sikerült mindent kitakarítani. A profiloldal címét a sminknév_preprocess_page()-ben, a profiltípus-címet pedig a sminknév_preprocess_user_profile_category()-ban lehetett elérni és kikapcsolni. Emellett a sminknév_preprocess_html()-ben hozzáadtam egy egyedi osztály a body-hoz.
Azzal végülis nem küzdöttem, hogyan lehet egyetlen helyen definiálni és utána a különféle preprocess-eknek átadni a profiloldal-típust meghatározó változót, mivel mindegyik függvényben sikerült beazonosítani. Nem állítom, hogy ez a legszebb és bombabiztos megoldás, de egyelőre működik.

0
0