views customfield un valoda

airbijs Mon, 05/14/2012 - 17:47

Sveicināti,

nepieciešami ieteikumi šādā situācijā:

ar views uztaisu lapu, kur ir daži lauki taisīti ar customfield (satur php skriptu), lietotājiem izvēloties valodu vajadzētu notikt to customfield atlase, kuri ir konkrētajai valodai.

Tīri teorētiski varu viņus paslēpt ar css, bet man liekas, ka tas nav labākais risinājums.

Vēl domāju, ka varētu taisīt divas views lapas, latvisko versiju un angļu, bet tad problēmas ar pārslēgšanos.

Ieteikumi?

Mazliet par maz izejošās informācijas, bet ja Custom field tev izdod teksta frāzi, tad tā tev jāieliek iekš t() funkcijas, lai to tulkošana būtu iespējama. Vai arī otrs, ja iet runa par formu, tad atlasei jābūt vadoties pēc valodas. Drupal tulkošanas komplektā izmanto 2 nodes - pa vienai katrā valodā. Ja pārējā lapas daļa nomainās, bet lauks nē, tātad tas lauciņš otrai valodai nav atbilstoši aizpildīts. Vai ar views taisi parastu nodes izklājumu, vai kādu listi? Parastam izklājumam views es neizmantoju, bet to, protams var darīt. Otrs, skatā ir jāizvēlas Current user language, lai no visiem rakstiem tiktu atlasīti tikai tajā valodā, kāda ir prefiksā, vai sub-domēnā, atkarībā no uzstādījumiem.
ar node_preprocess tēmā vai modulī, kodā varētu paslēpt lauku, atkarībā no valodas (global $language; $language->language). ja būtu zināms kāda drupal versija un vai tiek izmantota paša veidota tēma, tad varētu piedāvāt arī koda fragmentiņus.
Php man attāls, bet teorētiski man gribas domāt, ka kodu es varētu likt pa taisno iekšā customfield. Uzdevums, ja ir latviešu valoda, tad rāda customfield nr.1, ja angļu, tad rāda customfield nr.2. Ar views pārslēgšanos un satura nofiltrēšanu pēc lietotāja valodas nav problēmas. drupal versija 6, tēma paša veidota uz zen.
Es tomēr mēģinātu nejaukt divas valodas vienā dokumentā. Taisītu - vienā valodā viens dokuments, otrā - otrs. Tad ar to slēpšanu nebūtu jēga, un varētu tikt cauri ar Views risinājumu. Taču ja šis custom_field ir nepieciešams lv - en un lv valodā, tā pat kā en dokumentā - lv un en valodā, tad saprātīgākais risinājums tomēr būtu Jāņā Bebrīša piedāvātais - ar tēmas palīdzību iekš template.php apstrādāt izvēlēto valodu, un slēpt nevajadzīgo lauku. Tas samazinātu arī ielādējamās informācijas apjomu, jo nevajadzīgais lauks tiktu atslēgts kā tāds. Vai tu runā par lauku, kas ir node view skatījumā, vai formā (node/%/edit)? Var būt jau esi ar šo ticis galā?
Vēl netiku galā, bet man liekas, ka neizdevās izskaidrot vajadzību, mēģināšu vēlreiz. Mērķis ir uztaisīt ļoti vienkāršu pirkšanas iespēju ar paypal. Uztaisu views lapu (veikals), kur pielieku vajadzīgos laukus, tajā skaitā arī custom field, kurā ir iekšā php skripts, kurš nodrošina cenu izvēli un pirkšanu. Views filtros ielieku visu, kas vajadzīgs, tajā skaitā node translation - current user language. Viss smuki strādā un mainot uz en visi lauki mainās, izņemot manu custom field, kurā arī gribu iekļaut tulkojumu. Kā risinājumu izdomāju uztaisīt vienu custom field priekš lv versijas, otru en versijai un attiecīgi pēc lietotāja valodas pieprasījuma parādās viens vai otrs. Jautājums - kā pie valodu izvēles vienu lauku slēpt un parādīt attiecīgo?
Atrisināju izmantojot panels page. Uztaisīju vienā views divus displejus, vienu en, otru lv un panels lapā tiek veikta atlase pēc valodas.
Ja vien Panels modulis netiek izmantots arī citiem mērķiem, tad tas būtu overkill risinājums - tikai šim mērķim. Alternatīvas Panels modulim ir Display Suite moduļu grupa, taču katram savs. Es tomēr būtu skatījies no loģikas par šī Computed field saturu, jo pašlaik man nav saprotams šī lauciņa saturs vai tā būtība. Iespējams, ka PHP kodā, kuru tu izmanto iekš computed field, varētu veikt $language mainīgā pārbaudi, un atkarībā no vajadzības, izdot LV vai EN versiju. Ja tas ir par vienu un to pašu tēmu. Ja lauciņi atšķirīgi - cita lieta. Mazliet paeksperimentēju, un te ir kods, kuru ievietoju sub-tēmā (zem Omega), bet domāju, ka tam jāiet visur (arī ZEN). Slēpju lauku parādīšanu iekš template.php faila funkcijas. Izvērtējam, kāda šobrīd ir ieslēgta valoda, un attiecīgi atslēdzam pretējo lauciņu no mainīgajiem. Pieļauju domu, ka PHP var būt optimālāks, bet arī neesmu koderis. Šis darbojas, un nav vajadzīgs papildus moduļu klāsts, lai panāktu vienu sīku lietiņu. Atceries arī par t() funkciju, kurā iekļauto izdodamo string var tulkot arī ar Translate interface vai String overrides moduļiem. function YOURTHEME_preprocess_node (&$vars) { if ($vars['language'] == 'lv') { unset($vars['content']['field_computed_en_content']); } elseif ($vars['language'] == 'en') { unset($vars['content']['field_computed_lv_content']); } } * Piezīme:
  • YOURTHEME nomaini uz savas tēmas datornosaukumu;
  • field_computed_en_content: tavs custom lauciņš, kas satur informāciju, kas jāatēlo EN valodas versijā - nomaini pēc saviem apstākļiem;
  • field_computed_lv_content: tavs custom lauciņš, kas satur info, kas jāatēlo LV valodas versijā - nomaini pēc saviem apstākļiem.
Notīram kešu, un skatamies... Ceru, ka noderēs.
Patreiz atstāšu risinājumu ar panels, jo modulis tiek izmantots arī citos risinājumos lapā. Bet pasēdēšu un padomāšu par Tevis ieteikto kodu, tas noteikti ir "vieglāks", nekā izmantot šajā gadījumā panels.