template_preprocess

fgabor képe

Sziasztok!

A helyzet a következő: vannak nekem előjegyzéseim (booking node type). Egyik mezője user reference, másik mező datestamp. Ezeket calendarba megjelenítem. Feladat, hogy minden usernek különböző színe legyen. Ezt megoldottam egy külön modullal, ami lehetővé teszi hogy a user interface-n ki lehessen választani egy színt a usernek, és le van tárolva egy külön táblába. Előre definiált 12 szín van, ami a külön modul CSS fájlába rögzítve van a következő formában: color-1, color-2, color-3...stb.

Vegyük most a havi nézetet. Ennek a template fájlja: calendar-month-node.tpl.php

Ebbe én egy saját kis kóddal az elején meghatározom a colorref_id-t. A node tömb adott, ami nem teljes, de a nid kiszedhető.

<?php
if ($node->node_type == 'booking') {
        $nid = $node->nid;
        $content = node_load($nid);
        $user_id = $content->field_employee[0]['uid'];
        $colorref_id = db_result(db_query("SELECT colorref_id FROM {user_color} WHERE uid = %d", $user_id));
}
?>

Majd a megfelelő helyre beillesztem a template kódba:

<div class="view-item view-item-<?php print $view->name ?>">
    <div class="calendar monthview color-<?php print $colorref_id; ?>" id="<?php print $node->date_id ?>">
        <?php print theme('calendar_stripe_stripe', $node); ?>
                <?php foreach ($fields as $field): ?>
                    <div id="<?php print $field['id']; ?>" class="view-field view-data-<?php print $field['id'] ?> ">
        <?php if ($field['label']): ?>
                            <div class="view-label-<?php print $field['id'] ?>"><?php print $field['label'] ?></div>
        <?php endif; ?>
                    <?php print $field['data']; ?>
                    </div>
        <?php endforeach; ?>
    </div>
</div>

Ez így müködik teljesen jól. A gondom az, hogy sztem ez nem szép megoldás, és az a megérzésem, hogy ezt a template.php-ba meg definiálni lehetne ezt a colorref_id változót. A template fájl hivatkozik egy ilyen preprocess függvényre: template_preprocess_calendar_month_node

A következő hoztam össze a template.php-ba:

<?php
function garland_preprocess_calendar_day_node(&$vars) {
    $node = $vars['node'];
    if ($node->node_type == 'booking') {
        $nid = $node->nid;
        $content = node_load($nid);
        $user_id = $content->field_employee[0]['uid'];
        $colorref_id = db_result(db_query("SELECT colorref_id FROM {user_color} WHERE uid = %d", $user_id));
    }
    else
        $colorref_id = 0;
    $vars['colorref_id'] = $colorref_id;
}
?>

Kérdésem annyi, hogy jól gondolom-e a megoldást? (mert ez így nem működik) Illetve nem teljesen világos a preprocess függvények müködése. Kis segítséget kérnék ezzel a konkrét esettel kapcsolatba, mi lenne a jó út. Sok probálgatás után fordulok most ide.

üdv

Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
Drupal verzió: 
aboros képe

amikor bevezetted az új preprocesst, megvolt a sminkregtár ürítése? fut az előfeldolgozód, mondjuk egy drupal_set_message('yahoo, it works!'); -re mit lép? mert amúgy jónak tűnik.

0
0

-
clear: both;

fgabor képe

Megvolt az űrítés, és a drupal_set_message-re semmit nem reagál. Tehát nem megy bele, ha jól sejtem, kérdés csak, hogy miért nem?

0
0
Bálint képe

Más is lehet még probléma ezen kívül, viszont ilyen biztos, hogy nincs, hogy $node->node_type, $node->type legyen helyette.

Másrészt én ezt a szín betöltését a node-hoz hook_nodeapi() load opciójában intézném, a sminkrétegben nem valami szép az adatbázis-művelet. Ehelyett a már betöltött értéket használhatod a preprocessben.

0
0
fgabor képe

Igen, a node->type a jó, bár ez nem oldja meg a dolgot. Köszi a javaslatot, amint fel tudom hergelni az előfeldolgozót és úgy müködik, akkor kipróbálom ezt a hook_nodeapi load-ot.

0
0