Tagadelic + Internationalization probléma

simonp képe

Sziasztok!

Segítséget szeretnék kérni.

Egy kétnyelvű fotógaléria weblapot szerkesztek, ahol a beküldött fotókhoz címkéket lehet rendelni (év, ország, hely, fényképezőgép típusa stb. alapján), amelyeket aztán a Tagadelic modul segítségével címkefelhőben jelenítenék meg. Némely kategóriában (pl. ország) a címkék kétnyelvűek, ehhez az Internationalisation modult használom.

A probléma az, hogy a címkefelhőben egy kétnyelvű címkéket tartalmazó kategória mindkét nyelvű címkéi megjelennek (pl. az ország kategóriában egyszerre listázza ki azt, hogy Hungary és Magyarország), függetlenül attól, hogy melyik nyelv van kijelölve, de csak arra a nyelvű címkére kattintva kapok taxonómia kilistázást, amelyik nyelv épp használatban van.

Találkozott már valaki ezzel a problémával? És ha igen, hogyan lehet megoldani?

Előre is köszönöm!

aries képe

Sajnos a tagadelic modul nincs felkészítve a nyelvek kezelésére (direktben kezeli a taxonómia modul adattábláit), ezért jeleníti meg az összes kifejezést.

0
0
simonp képe

Igen, én is így sejtettem. Mindenesetre köszönöm a választ!

0
0
Webappz képe

Ha már a kép beküldőjének úgy is ki kell választani a taxonomy listából a különböző nyelvekhez tartozó cimkéket, akkor szerintem érdemesebb lenne minden nyelvhez egy-egy szótárt létrehozni és minden cimke fordítását a neki megfelelő nyelvű szótárba rakni.
Ebben az esetben, az egyes szótárakhoz tartozó tagadelic blokknál be tudod állítani, hogy hol jelenjen meg, és attól függően, hogy hogyan kezeled a különböző nyelvű tartalmakat vagy csak az adott útvonal alá tartozó elemeknél jeleníted meg az adott blokkot pl.: (hu/kepek/*) vagy php-s kifejezésként lekérdezed, hogy melyik nyelv az akutális és csak az adott nyelvhez tartozó tagadelic blokkot rakod ki.

0
0

Páldi Zoltán

simonp képe

Köszönöm az ötletet!
Ez nekem is eszembe jutott már, de itt a probléma az lenne, hogy ha külön szótárt hozok létre a különböző nyelvű címkéknek, akkor nem tudom majd az egyik szótárban lévő címkét a neki megfelelő fordításhoz kapcsolni a másik szótárban, ami további nehézségekhez vezetne. Vagy rosszul gondolom?

0
0
Webappz képe

Akkor én értettem félre a dolgot. Azt hittem, hogy egyetlen szótárt használsz, amiben minden cimke szerepel, tehát külön van pl.: Magyarország és Hungary. Úgy gondoltam, hogy nincs közöttük kapcsolat, csak a megfelelő cimkéket a beküldő nyelvismeretében bízva bejelöli külön-külön, hogy Magyaroszág és Hungary. Többnyelvű oldalhoz én a localizer modult használtam, a tartalom fordítás és a menü az jól ment, de a kategorizálásra már nem emlékszem.

0
0

Páldi Zoltán

simonp képe

Az Internationalization sem rossz, eddig ez az egy problémám volt vele:)

0
0
aboros képe

sose csináltam még ilyet, de annyira kézenfekvő ez a probléma, nem is értem, hogy miért nem figyeltek erre a tagadelicnél. mindegy is.
kicsit belenéztem a tagadelic modulba és egyetlen db_query -t talátlam benne, aminek nagyon megörültem. sikerült hamar átformálnom úgy ezt a részt, hogy a lekérdezés figyelembe vegye az aktuális nyelvet.

persze rögtön beleszaladtam abba is, hogy a tagadelic cache -t is használ, szóval eleinte minden nyelvváltás után ürítenem kellett devellel a cache -t, hogy frissüljön a címkefelhő, de hamar megoldottam ezt is.

szóval a témaidnító problémára visszatérve, nekem nyelvfüggők lesznek a címkefelhők, ha áthekkelem a tagadelic.module -t így:

210. sor:

function tagadelic_get_weighted_tags($vids, $steps = 6, $size = 60) {
  // build the options so we can cache multiple versions
  $options = implode($vids) .'_'. $steps .'_'. $size;
  // + Get current language
  global $language;
  // Check if the cache exists
  $cache_name = 'tagadelic_cache_'. $options .'_'. $language->language;
  $cache = cache_get($cache_name);
 
  // make sure cache has data
  if (isset($cache->data)) {
    $tags = $cache->data;
  }
  else {
 
    if (!is_array($vids) || count($vids) == 0) {
      return array();
    }
 
    $result = db_query_range('SELECT COUNT(*) AS count, d.tid, d.name, d.vid, d.language FROM {term_data} d INNER JOIN {term_node} n ON d.tid = n.tid WHERE d.language="%s" AND d.vid IN ('. substr(str_repeat('%d,', count($vids)), 0, -1) .') GROUP BY d.tid, d.name, d.vid ORDER BY count DESC', $language->language, $vids, 0, $size);
 
    $tags = tagadelic_build_weighted_tags($result, $steps);
 
    cache_set($cache_name, $tags);
  }
 
  return $tags;
}

nem tudom, hogy ez "okos" megoldás e (most azt leszámítva, hogy modulba belehekkelni sose olyan okos). ha túl nagy hülyeség, úgyis szól majd valaki, hogy héló, az nem hurok.. ;)

0
0

-
clear: both;

simonp képe

aboros,
Köszönöm a hekket, de sajnos nekem nem működik. Úgy néztem, hogy te a Drupal 6-ra írt tagadelic-module-t írtad át, én viszont Drupal 5-öt használok. Lehet, hogy ezért?
Ezt cseréltem le:

function tagadelic_get_weighted_tags($vids, $steps = 6, $size = 60) {
//CACHING! PLease! Send! in! your! patches! :)
if (!is_array($vids) || count($vids) == 0) {
return array();
}
$result = db_query_range('SELECT COUNT(*) AS count, d.tid, d.name, d.vid FROM {term_data} d INNER JOIN {term_node} n ON d.tid = n.tid WHERE d.vid IN ('. substr(str_repeat('%d,', count($vids)), 0, -1) .') GROUP BY d.tid, d.name, d.vid ORDER BY count DESC', $vids, 0, $size);

return tagadelic_build_weighted_tags($result, $steps);
}

de hibaüzenetet kaptam.
Ha van időd, energiád és kedved, nagyon hálás lennék, ha belenéznél az 5-ös verzióba is, de köszönöm az eddigi fáradozásodat is!

0
0
aboros képe

nem írtad, hogy hanyas. írni kell, hogy hanyas. mindig. mert különben ez van. kár, pedig tökre megörültem, hogy mekkorajó megoldást küldtem. :(

5.x -ben nincs még $languages, hanem a nyelv benne van az url -ben. 6.x -ben is benne van látszólag, de egy pelda.hu/hu/node -urlnél nekem a 6.x arra, hogy arg(0) azt válaszolja: node. meg is lepődetem rendesen. (persze hamar belátható, hogy igazából sokkal jobb ez így, hogy nincs benne az urlben a nyelv)

nincs sajnos 5.x -es "játszóterem" úgyhogy kipróbálni ezt most nincs időm, de ötben is ugyan azt kell csinálni, csak a nyelvet kell arg(0) -val kideríteni és a cache rész meg teljesen kimarad. valahogy így:

function tagadelic_get_weighted_tags($vids, $steps = 6, $size = 60) {
//CACHING! PLease! Send! in! your! patches! :)
if (!is_array($vids) || count($vids) == 0) {
return array();
}
$language = arg(0);
$result = db_query_range('SELECT COUNT(*) AS count, d.tid, d.name, d.vid FROM {term_data} d INNER JOIN {term_node} n ON d.tid = n.tid WHERE d.language = "%s" AND d.vid IN ('. substr(str_repeat('%d,', count($vids)), 0, -1) .') GROUP BY d.tid, d.name, d.vid ORDER BY count DESC', $language, $vids, 0, $size);
 
return tagadelic_build_weighted_tags($result, $steps);
}

ha nem ismerős ez az arg(), nézz utána api.drupal.org -on!
lehet, hogy olyan hibaüzenetet kapsz, hogy a term_data táblában nincs language mező, akkor nézd meg az adatbázisban milyen mező az ami a nyelvet tartalmazza és azt vizsgáld a lekérdezésben.

és vigyázz, ha frissíted a tagadelic modult, akkor ezt a hekket újra "ki kell sütni".
(paprikás lisztben nyamnyam;)

0
0

-
clear: both;

nemetivilmos képe

Kipróbáltam a javaslatot, beírtam a 210 sorba a régi lekérdezési blokk helyett és ezt üzeni, hogy nem találja :

user warning: Unknown column 'd.language' in 'field list' query: SELECT COUNT(*) AS count, d.tid, d.name, d.vid, d.language FROM term_data d INNER JOIN term_node n ON d.tid = n.tid WHERE d.language="hu" AND d.vid IN (1) GROUP BY d.tid, d.name, d.vid ORDER BY count DESC LIMIT 0, 12 in C:\xampp\htdocs\tutor\sites\all\modules\tagadelic\tagadelic.module on line 231.

Értem, kérem, értem én .... nincs neki a listában említett d.language mező. Hát akkor mit lehetne tennünk ? Van-é javaslatod Ádám ? (nagyon mélyen szántót ne mondj, mert arra még nem vagyok alkalmas, a php messze áll még tőlem ) Milyen nevü táblában és mit keressek ...

Köszi szépen :)) Igy egy év múltával

Drupal 6.1.3 és Tagadelic

Information added by drupal.org packaging script on 2008-12-31
version = "6.x-1.2"
core = "6.x"
project = "tagadelic"
datestamp = "1230725138"

Mit rontottam el ??

0
0

Németi Vilmos - méregzöld kezdő Drupal-os