Smarty и charset

djman

Registered
Здравейте!

Защо когато напиша следното
Код:
{$smarty.now|date_format:'%A'}

излиза
������
вместо "събота" ...

Всички charset-ове и encoding-и са наред ( utf-8 ), но това излиза с въпросните въпросителни... Идеи? :)
 
Ако наистина файловете и чарсета ти е такъв, то погледни базата от данни. Или при въвеждането или при извеждането нещо не е наред
 
shterev каза:
Ако наистина файловете и чарсета ти е такъв, то погледни базата от данни. Или при въвеждането или при извеждането нещо не е наред

И тя е наред. Макар че $smarty.now няма нищо общо с базата - то е еквивалент на time(). Явно ще трябва да си го направя с time...
 
Смарти няма как да ти изкара стринга на български, изкарва го на наглйски. Ти как точно го обръщаш?
 
shterev каза:
Смарти няма как да ти изкара стринга на български, изкарва го на наглйски. Ти как точно го обръщаш?

ами всъщност си го изкарва на български (зависи от PHP сървъра дали е настроен). Ако се промени чарсета на браузера на windows-1251 - се появява "събота" (и всичко останало на йероглифи, съответно)...
 
ами аз съм го правил по друг начин, но с ООП

Ето ти пример, който съм ползвал:


Код:
{'months'|t:$n->published_at->format('m')} - това е в темплайта

return array(
'months'	=> array(
		1			=> 'Януари',
		2			=> 'Февруаро',
		3			=> 'Март',
		4			=> 'Април',
		5			=> 'Май',
		6			=> 'Юни',
		7			=> 'Юли',
		8			=> 'Август',
		9			=> 'Септември',
		10			=> 'Октомври',
		11			=> 'Ноември',
		12			=> 'Декември'
	)
);

Това е чает от lаng файл
Ако ти дойде идея , добре, иначе нямам идея за друго
 
Ем то си ги изкарва правилно, само кодировката е омазана някъде.
Няма ли нещо от типа $smarty->charset = 'utf8'; ....
 
аз си обработвам с ООП месеца и после го асаивам към смартито и няма проблеми

виж добави това в края
Код:
{$smarty.now|date_format:'%A'|utf8_encode}
 
embaka каза:
аз си обработвам с ООП месеца и после го асаивам към смартито и няма проблеми

виж добави това в края
Код:
{$smarty.now|date_format:'%A'|utf8_encode}

И това добавях, резултата е "íåäåëÿ" ...
А този вграден modifier - date_format и годината не може да покаже о.О Като напиша '%G' - нищо не се показва...

В крайна сметка си направих сам modifier, супер прост и нищо особено
Код:
function smarty_modifier_dformat($string, $format = SMARTY_RESOURCE_DATE_FORMAT)
{
    $date = date($format, $string);
	return $date;
}

ще добавя и превеждането на дните и месеците от англ към бг. Дали ще е проблем да го ползвам така?
 
в такъв случай пробвай с това

Код:
{$smarty.now|date_format:'%A'|utf8_decode}


може да пробваш даси преработиш тоя модифер, който е за датата, просто опиши в едим масив месеците и после ги замествай, ама най добре си го прави това в php и после си го асанвай
 
embaka каза:
в такъв случай пробвай с това

Код:
{$smarty.now|date_format:'%A'|utf8_decode}


може да пробваш даси преработиш тоя модифер, който е за датата, просто опиши в едим масив месеците и после ги замествай, ама най добре си го прави това в php и после си го асанвай

с decode резултата е просто две въпросителни - "??"

Въпросът е, че ми трябва ред от типа "понеделник, 24 януари 2011 г., 14:32 ч.", но във header.tpl - т.е. във всеки файл. Ако беше само на 1 място до сега да го бях направил, но така го мъдря сега.
А със собствен modifier не е удачно, така ли?
 
удачно е, въпроса е да работи :) но ще има бая писане, така като гледам оригиналния модифер date_format :D

утре може да се опитам да напиша нещо такова, че сега не ми се мисли :D, а и трябва да прочета всички формати за date
 
Да, оригиналния наистина е сложничък. Моя пък е прост и най-важното: работи (и то с твоя помощ преди време)))
Мерси ;)


edit - ако успееш ще съм ти признателен)))
 
я замени това цялото нещо както ти го давам

Код:
<?php
/**
 * Smarty plugin
 * @package Smarty
 * @subpackage plugins
 */

/**
 * Include the {@link shared.make_timestamp.php} plugin
 */
require_once $smarty->_get_plugin_filepath('shared', 'make_timestamp');
/**
 * Smarty date_format modifier plugin
 *
 * Type:     modifier<br>
 * Name:     date_format<br>
 * Purpose:  format datestamps via strftime<br>
 * Input:<br>
 *         - string: input date string
 *         - format: strftime format for output
 *         - default_date: default date if $string is empty
 * @link http://smarty.php.net/manual/en/language.modifier.date.format.php
 *          date_format (Smarty online manual)
 * @author   Monte Ohrt <monte at ohrt dot com>
 * @param string
 * @param string
 * @param string
 * @return string|void
 * @uses smarty_make_timestamp()
 */
function smarty_modifier_date_format($string, $format = '%b %e, %Y', $default_date = '')
{
    if ($string != '') {
        $timestamp = smarty_make_timestamp($string);
    } elseif ($default_date != '') {
        $timestamp = smarty_make_timestamp($default_date);
    } else {
        return;
    }
    if (DIRECTORY_SEPARATOR == '\\') {
        $_win_from = array('%D',       '%h', '%n', '%r',          '%R',    '%t', '%T');
        $_win_to   = array('%m/%d/%y', '%b', "\n", '%I:%M:%S %p', '%H:%M', "\t", '%H:%M:%S');
        if (mb_strpos($format, '%e') !== false) {
            $_win_from[] = '%e';
            $_win_to[]   = sprintf('%\' 2d', date('j', $timestamp));
        }
        if (mb_strpos($format, '%l') !== false) {
            $_win_from[] = '%l';
            $_win_to[]   = sprintf('%\' 2d', date('h', $timestamp));
        }
        $format = str_replace($_win_from, $_win_to, $format);
    }
    return strftime($format, $timestamp);
}

/* vim: set expandtab: */

?>
 
я дай да видя какво правиш точно че не схванах, дай ми кода си с php и smarty, искаш директно от формат date('d m Y', time()) да върнеш месеца във формат на български с функцията date_format. направи тая работа в php
Код:
$_month_labels	= array("", "Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември");


$datata= $_month_labels[date('n',$row['date'])];
това ще ти върне месеца на кирилица, но само месеца

това го направи в php, и после на мястото на месеца в смарти

Код:
{$data|date_format:"%d, %datata, %Y"}
нещо такова трябва да стане

не те знам как асайнваш данните, ако се налага сложи ги в масив тея данни и после да можеш по лесно да ги асайнеш като отделни елементи
 
Целта ми е да направя това
Код:
date('l, d F Y г., H:i ч.', $string)

със смарти го правя така, само в темплейта на header.tpl (пиша само тези 2-те сега)

{$smarty.now|date_format:'%A, %G'}

интересното е, че като добавя %G (за година 0000-9999) - целия ред изчезва. Все едно не съм написал това. А modifier-a ми който в момента работи е следния

function smarty_modifier_dformat($string, $format = SMARTY_RESOURCE_DATE_FORMAT, $default = true)
{
if($default == true)
{
$en_months = array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
$bg_months = array("януари", "февруари", "март" , "април" ,"май", "юни", "юли", "август", "септември", "октомври", "ноември", "декември");
$current_months = str_replace($en_months, $bg_months, date('F'));

$en_days = array("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday");
$bg_days = array("понеделник", "вторник", "сряда" , "четвъртък" ,"петък", "събота", "неделя", "Август", "Септември", "Октомври", "Ноември", "Декември");
$current_days = str_replace($en_days, $bg_days, date('l'));

$date = date($current_days.', d '.$current_months.' Y г., H:i ч.', $string);

return $date;
}
else{
$date = date($format, $string);
return $date;
}
}




И пак казвам - никъде не асайнвам данните, защото няма файл който да сочи към header.tpl - освен във всеки файл да асайнвам едно и също, но защо...
 
Код:
$_mesec   = array("", "Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември");

$mesec= $_mesec[date('n',time())];
$smarty->assign('mesec', $mesec);


$_den   = array("Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота");

$den= $_den[date('w',time())]; 
$smarty->assign('den', $den);

това горе в php го слагаш



{$den'} , {$smarty.now|date_format:"%d"} {$mesec'} {$smarty.now|date_format:"%Y"}г,  {$smarty.now|date_format:"%H:%M"} а това ти е в темлейта



ето това ти е цялата работа
 
Добре де, ама това ми трябва за хедър файл

пр. index.php сочи към index_view.tpl
а вътре в index_view.tpl има {include file="header.tpl" title=$title}
в който header.tpl е това, което ми трябва. Т.е. няма как да assign-а това, което ти даваш, защото този header.tpl е инклуднат в няколко файла, а да пиша това, което ти даваш във всичките php-та няма как... :/
 

Back
Горе