drupal กับปุ่มเปลี่ยนภาษา

By siamth

ตอนลองกับ drupal5 ใช้โค๊ดนี้ไม่มีปัญหา

<?php
// modified function
 
function excl_translation_get_links($path = '', $query = NULL, $names = NULL) {
  $current = i18n_get_lang();
  $names = $names ? $names : i18n_languages('native');
  foreach (array_keys(i18n_supported_languages()) as $lang){
  if ($lang != $current) {
    $url = translation_url($path, $lang);
    $links[]= theme('i18n_link', $names[$lang], i18n_path($url, $lang) , $lang, $query);
  }}
  return $links;
}
 
$lang_list = theme('item_list', excl_translation_get_links($_GET['q'], empty($query) ? NULL : $query));
 
echo $lang_list;
?>

แต่พอมา drupal6 จอดสนิทเลยครับ

คือ ผมอยากให้มันแสดงปุ่มภาษาเฉพาะอันที่ยังไม่ได้เลือกนะครับ เช่นตอนนี้ภาษาไทยก็ไม่ต้องแสดงปุ่มภาษาไทยออกมา แล้วก็ไม่อยากใช้ block ด้วยนะครับ เพราะผมทำ theme ใหม่หมดวางโครงไว้หมดแล้ว

ตอนนี้ใช้ drupal 6.2 ครับ

ขอบคุณครับ

7 comments

รูปภาพของ sugree
By sugree
2 years 19 weeks ago

เปลี่ยน

เปลี่ยน i18n_supported_languages() เป็น language_list() ส่วน i18n_get_lang() มี $language เป็น global ให้ใช้ครับ

By siamth
2 years 19 weeks ago

ไม่สำเร็จ

ไม่สำเร็จครับ T_T

รูปภาพของ sugree
By sugree
2 years 19 weeks ago

มี error มั๊ย

มี error มั๊ย

By siamth
2 years 19 weeks ago

ไม่มีครับ

ไม่มีครับ หน้าขาวไปเลย

ตอนนี้พยายามทำแบบนี้อยู่ครับ

template.php

function phptemplate_locale_block() {
    $languages = language_list('enabled');
    $links = array();
    foreach ($languages[1] as $language) {
      $links[$language->language] = array(
        'href'       => $_GET['q'],
        'title'      => $language->native,
        'language'   => $language,
        'attributes' => array('class' => 'language-link'),
      );
    }
 
    // Allow modules to provide translations for specific links.
    // A translation link may need to point to a different path or use
    // a translated link text before going through l(), which will just
    // handle the path aliases.
    drupal_alter('translation_link', $links, $_GET['q']);
 
    $block = theme('links', $links, array());
    return $block;
  }

page.tpl.php

<html>...
<?php print (phptemplate_locale_block());?>

มันก็จะแสดงผลออกมาปกติ คือ2ภาษาไทยกับอังกฤษ

พอจะมีวิธีทำให้มันแสดงแค่ภาษาที่ยังไม่ได้เลือกได้ไหมครับ ลองใส่ if ดูมันก็ไม่ได้ผล เพราะเหมือนมันไปคิวรี่ซ้อนอีกทีกับตัวนี้ drupal_alter('translation_link', $links, $_GET['q']); ก็ทำให้แสดง 2 ภาษาเหมือนเดิม

ขอบคุณครับ

รูปภาพของ sugree
By sugree
2 years 19 weeks ago

ใน page.tpl.php

ใน page.tpl.php น่าจะเป็น

<?php print theme('locale_block'); ?>

ส่วนใน phptemplate_locale_block น่าจะลบภาษาอื่นออกจาก $links หลังจากเรียก drupal_alter

By siamth
2 years 19 weeks ago

sites/all/themes/yourtheme/te

sites/all/themes/yourtheme/template.php

 
function phptemplate_locale_block($current_lang) {
    $languages = language_list('enabled');	
    $links = array();	
    foreach ($languages[1] as $language) {
      $links[$language->language] = array(
        'href'       => $_GET['q'],
        'title'      => $language->native,
        'language'   => $language,
        'attributes' => array('class' => $language->language),
      );
    }
 
    // Allow modules to provide translations for specific links.
    // A translation link may need to point to a different path or use
    // a translated link text before going through l(), which will just
    // handle the path aliases.
    drupal_alter('translation_link', $links, $_GET['q']);
 
	foreach($links as $linkz){
		if(($linkz[language]->language)==($current_lang))continue;		
			$links=array($linkz);			
	}
 
    $block = theme('links', $links, array());
    return $block;
  }

sites/all/themes/yourtheme/template.php

 
<html>
...
....
<body>
 
<?php print (phptemplate_locale_block($language->language));?>

ปล. ลองใส่เป็น <?php print theme('locale_block','$language->language'); ?> แล้วมันนิ่งครับ

ตอนนี้แสดงผลเฉพาะภาษาที่ยังไม่ได้เลือกเรียบร้อยแล้วครับ ขอบคุณครับ

รูปภาพของ sugree
By sugree
2 years 19 weeks ago

ควรจะเป็น

ควรจะเป็นแบบนี้

<?php global $language; print theme('locale_block', $language->language); ?>

หรือไม่ก็ไป global อยู่ใน function