Správa prekladov node cez views
Robím teraz viacjazyčný web a chcel som do administrácie vložiť možnosť zobrazenia všetkých prekladov pre aktuálny node (v jednom riadku). Nejak sa mi k tejto téme nepodarilo nič nájsť a tak som si pomohol PHP Views Customfield a takýmto kúskom kódu:
<?php
/**
* show all possible translations edit or create links
* you need fields before this customfield (excluded from display)
* - Node: nid
* - Node translation: Translation set node ID
*/
// get all enabled languages
$languages = language_list();
$node_nid = $data->node_tnid ? $data->node_tnid : $data->nid;
$node_language = $data->node_node_language ? $data->node_node_language : $data->node_language;
// get all translations for node
$node_translations = translation_node_get_translations($node_nid);
$translate_links = array();
foreach ($languages as $language_code => $language_settings) {
// source language without link
if ($language_code == $node_language) {
$translate_links[] = 'Source: ' . strtoupper($language_code);
continue;
}
if (!empty($node_translations[$language_code])) {
// edit translation for language
$translate_links[] = l(strtoupper($language_code), 'node/' . $node_translations[$language_code]->nid . '/edit', array('attributes' => array('class' => 'edit-translation'), 'query' => array('destination' => $_GET['q'])));
}
else {
// create translation for language
$translate_links[] = l(strtoupper($language_code), 'node/add/image-gallery', array('attributes' => array('class' => 'create-translation'), 'query' => array('translation' => $node_nid, 'language' => $language_code, 'destination' => $_GET['q'])));
}
}
print implode(' | ', $translate_links);
?>
Používam to pre obrázkovú galériu (metóda podľa Vytvoření pokročilé Fotogalerie v Drupalu – I.) pretože bola požiadavka aby sa nemuseli nahrávať tie isté obrázky viac krát – stačí preložiť (vytvoriť node s prekladom). Ak máte lepšie tipy ako spravovať preklady tak sem s nimi.
Momentálne to vyzerá takto: http://screencast.com/t/NGQ2N2Y5ZT (správa galérií) – http://screencast.com/t/OWJlODdj (view), po kliknutí na názov galérie zoznam obrázkov http://screencast.com/t/MzYzNDdiZD. Všetky prekliky sú upravené tak aby ukazovali vždy na nid (alebo teda tnid) zdroja prekladu, takže by normálne nemal užívateľ vedieť pridávať fotky do prekladovej galérie (aj keď to samozrejme ide).
Pre zobrazenie galérie (aby vždy brala zoznam obrázkov zo „source“) som si musel pridať vlastný token [tnid] http://screencast.com/t/NTQxMTRjNWQ (nechápem prečo default nie je), modul vyzerá takto:
<?php // $Id$
/**
* @file
* The Token API module.
*
* The Token module provides an API for providing tokens to other modules.
* Tokens are small bits of text that can be placed into larger documents
* via simple placeholders, like %site-name or [user].
*
* @ingroup token
*/
/**
* Implementation of hook_token_list().
*/
function bebetv_token_token_list($type = 'all') {
$tokens = array();
if ($type == 'node' || $type == 'all') {
// Node tokens here.
$tokens['node']['tnid'] = t('Node Translation ID');
}
return $tokens;
}
/**
* Implementation of hook_token_values().
*/
function bebetv_token_token_values($type, $object = NULL) {
$values = array();
switch ($type) {
case 'node':
// Node tokens here.
$values['tnid'] = $object->tnid ? $object->tnid : $object->nid;
break;
}
return $values;
}
Snáď sa niekomu takáto metóda zíde.

Poslat nový komentář