Kalendárium fordított dátum
Sziasztok!
Drupal 5.3, Date 5.x-1.8, Calendar 5.x-1.7 és magyarosítani szeretném a naptár dátumkezelését.
Ez előző hozzászólások alapján próbálkoztam, de az eredmény csak félsiker lett.
Ha kiteszem a naptárat egy jobb oldali blokkba, akkor "április 2008" lesz a blokk címe (ami randa), viszont a naptár fejlécében már (helyesen) "2008. ápr" lesz.
Ha rákattintok mondjuk egy beküldött eseményre, ami április 12-én van, akkor a bejövő node címe "szombat, április 12 2008" lesz (csúnyán), alatta a keretes naptár fejlécében "2008. április 13., vasárnap" szerepel (helyesen és szépen).
Természetesen a Calendar telepítése után létrehoztam egy Nézetet, a megfelelő paraméterekkel (Calendar: Year, Calendar: Month, Calendar: Day - Összes érték megjelenítése - Cím: %1, %2, %3) ahogy a Nagykönyvben meg van írva, tehát működik a naptár, a beküldött időpontokat megjelöli)
Ezt szúrtam be a template.php végére:
function phptemplate_calendar_nav_title($field_type, $view) { calendar_load_date_api(); switch ($field_type) { case 'YEAR': return $view->year; case 'MONTH': // Month navigation titles are used as links in blocks and in the year view. // For the timestamp, use the second day of the month because gm functions sometimes return the previous month $timestamp = date_array2unix(array('year' => $view->year, 'mon' => $view->month, 'mday' => 1)); if ($view->build_type == 'block' || $view->calendar_type == 'year') { return l(date_format_date('Y. M', $timestamp), $view->real_url .'/'. $view->year .'/'. $view->month, array(), calendar_url_append($view)); } else { return date_format_date('Y. F', $timestamp); } case 'DAY': $timestamp = date_array2unix(array('year' => $view->year, 'mon' => $view->month, 'mday' => $view->day, 'hours' => 24)); return date_format_date('Y. F j., l', $timestamp); case 'WEEK': return t("Week of @date", array('@date' => date_format_date('Y. F j.', calendar_week('start_timestamp', $view, $view->week)))); } }
- A hozzászóláshoz regisztráció és bejelentkezés szükséges
en csinalnek egy uj node
en csinalnek egy uj node tipust, peldaul hirdetes.
a /themes/garland/ ala betehetsz egy node-hirdetes.tpl.php file-t amit a node.tpl.php atmasolasaval csinalod meg. miutan atmasoltad, megszerkeszted a node-hirdetes.tpl.php -t, hogy megjeleniteskor tegye bele valahova az adott node "nid"-jet.
<?php phptemplate_comment_wrapper(NULL, $node->type); ?> <div id="node-<?php print $node->nid; ?>" class="node<?php if ($sticky) { print ' sticky'; } ?><?php if (!$status) { print ' node-unpublished'; } ?>"> <?php print $picture ?> <?php if ($page == 0): ?> <h2><a href="<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a></h2> <?php endif; ?> <?php if ($submitted): ?> <span class="submitted"><?php print t('!date — !username', array('!username' => theme('username', $node), '!date' => format_date($node->created))); ?></ <?php endif; ?> <div class="content"> <?php print $content ?> <?php print t('hiredetes kodja: %kod',array('%kod'=>$node->nid)); ?> </div> <div class="clear-block clear"> <div class="meta"> <?php if ($taxonomy): ?> <div class="terms"><?php print $terms ?></div> <?php endif;?> </div> <?php if ($links): ?> <div class="links"><?php print $links; ?></div> <?php endif; ?> </div> </div> ?>
ezt hiszem igy valahogy, (ez drupal 5 -alatt asszem jo. drupal6 eseten csak merem remelni)
- A hozzászóláshoz regisztráció és bejelentkezés szükséges
Csak a tipli fájlt kell változtatni
Ím:
$output = "<div class=\"fields\">"; $time_period = variable_get('user_block_seconds_online', 2700); // Itt a pp altal is javasolt biztonsagos megoldas. $uid = arg(1); // get the current userid that is being viewed. $users = db_query("SELECT uid, name, access FROM {users} WHERE access >= %d AND uid = %d", time() - $time_period, $uid); $total_users = db_result($users); if ($total_users == 1) { $output .= t('A felhasznalo jelenleg online'); } else { $output .= t('A felhasznalo jelenleg offline'); } $output .= "</div>"; // Innentol ez mar az eredeti theme_user_profile() tartalma. $output .= '<div class="profile">'; $output .= theme('user_picture', $account); foreach ($fields as $category => $items) { if (strlen($category) > 0) { $output .= '<h2 class="title">'. check_plain($category) .'</h2>'; } $output .= '<dl>'; foreach ($items as $item) { if (isset($item['title'])) { $output .= '<dt class="'. $item['class'] .'">'. $item['title'] .'</dt>'; } $output .= '<dd class="'. $item['class'] .'">'. $item['value'] .'</dd>'; } $output .= '</dl>'; } $output .= '</div>'; echo $output;
Ezután még a bio hozzácsapja a saját tartalmát és kész.
Megjegyzés: A t() függvényt csak angol szöveggel szabad használni. Majd ezt lehet később magyarítani. Így is működik, de nem ajánlott.
- A hozzászóláshoz regisztráció és bejelentkezés szükséges
a $form_state jó írány
nem tudom, h azóta megoldottad-e, de jó irányba keresgélsz, csak ahhoz hogy működjön szükséges néhány lépés.
Első, hogy a formodnak fogadnia kell a $form_state változót első paraméterként:
function pelda_szuro_form(&$form_state = NULL) { //form definíció... }
A következő lépés, hogy meg kell kérned a FAPI-t, hogy építse újra a formodat beküldés után. Erre két lehetőséged van: vagy a $form_state['rebuild']-et állítod TRUE-ra, vagy a $form_state['storage']-ba teszel valamit:
hivatalos:
function pelda_szuro_form_submit($form, &$form_state) { //eredémyek összegyűjtése $eredmenyek-be.... //küldjük vissza magunknak $form_state['storage']['pelda_eredmenyek'] = $eredmenyek; }
de ez is működik:
function pelda_szuro_form_submit($form, &$form_state) { //eredémyek összegyűjtése $eredmenyek-be.... //küldjük vissza magunknak $form_state['pelda_eredmenyek'] = $eredmenyek; $form_state['rebuild'] = TRUE; }
Bármelyket választod a _submit() után a FAPI újra meghívja a formod, csak mostmár nem egy "üres" $form_state-el, hanem azzal, amit a _submit() "visszaadott":
function pelda_szuro_form(&$form_state = NULL) { //rövidítsünk: $values = &$form_state['values']; $form['szuro_elem'] = array( '#type' => 'textfield', '#title' => t('Example filter'),//hogy fordítható legyen //ez azért kell, hogy beküldés után megjelenjen a beküldött érték '#default_value' => isset($values['szuro_elem']) ? $values['szuro_elem'] : '', ); //feltéve hogy a storage-ot használtad és $eredmenyek egy link lista $storage = &$form_state['storage']; if (isset($storage['pelda_eredmenyek']) && !empty($storage['pelda_eredmenyek'])) { $form['eredmenyek'] = array( '#type' => 'markup', '#value' => theme('item_list', $storage['pelda_eredmenyek']), ); } return $form; }
Egyébként ugyan ezzel a megoldással működnek a többoldalas űrlapok is, csak akkor küldönböző form definíciót adsz vissza a $form_state állapotának függvényében, bár ha úgy vesszük, akkor ez is egy többoldalas űrlap: az első oldalon nincs eredmény, a másodikon pedig van.
SEO: remélem ez így most elég aboros barát. :D
- A hozzászóláshoz regisztráció és bejelentkezés szükséges
igen, de szerencsére egyszerű a megoldás
Igen, tényleg emiatt nem megy, azért, mert a calendar_tooltips.module-ban lévő
calendar_tooltips_preprocess_calendar_datebox()
függvényt úgy írták meg, hogy a $vars['link']
változóhoz fűzi hozzá a tooltiphez szükséges markupot:
else $vars['link'] = '<span>' . $vars['day'] . '</span>'; $vars['link'] .= $bt_text; /* The balloon text is appended to the link variable, like this: "<a href=...>31</a> <div>balloon text</div>" (see above). which makes it difficult for the user to alter the link without losing the balloon text. That's why we provide an extra variable with the balloon text only. The user may use this to append to the new link when overriding calendar-datebox.tpl.php. */ $vars['calendar_tooltips_text'] = $bt_text;
Úgyhogy a megoldás:
az itt mutatott
SMINKEDNEVE_preprocess_calendar_datebox
függvényed
legvégére (még a függvény végét lezáró kapcsos zárójel elé)
tedd be ezt:
// @see calendar_tooltips_preprocess_calendar_datebox() $vars['link'] .= $vars['calendar_tooltips_text']; }
Szerencsére ennyi megoldja.
- A hozzászóláshoz regisztráció és bejelentkezés szükséges
Javítom magam: ['und'][0] és hasonlók kerülendők
Javítom magam:
Ez egy csúnya megoldás, ami elkerülhető a field_get_items() használatával.
Ehhez ezt a cikket nagyon tudom ajánlani:
http://www.computerminds.co.uk/articles/rendering-drupal-7-fields-right-way
Aki a moduljában/sminkjében fieldekkel babrál, annak itt megfontolandó tanácsok vannak, konkrétan az előbb linkelt field_get_items() és a field_view_value(), ill. a field_view_field() használata javasolt.
Tehát ami ROSSZ:
HELYETTE JÓ PÉLDÁK:
$output = field_view_field('node', $node, 'field_name');
=========================
Ezek alapján a javított kód:
(a kód első fele jó, tehát a hook_ds_fields_info() implementálása ugyanaz marad)
http://drupal.stackexchange.com/questions/45198/how-to-output-get-locati...