Další metody třídy String

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Tomik
Nette Evangelist | 485
+
0
-

Co bys říkal na podporu formátování lidského času do stylu „před hodinou“, „přes měsícem“, Davide?

Něco ve smyslu String->humanTime(datetime, int $date);

A pak další (možná) užitečná věc by byla formátování měn (tedy podle zvyklostí psaní dané měny), např. 30 Kč a $3.

Zdraví Tomik

simon
Člen | 98
+
0
-

FuzzyTime bych nechal do Nette::Extras, stejně tak ty měny.

Honza Marek
Člen | 1664
+
0
-

Nette::Extras? Jakože by se tam založila nová třída ExtraString, která by tohle uměla? Tomu moc nerozumim.

Jod
Člen | 701
+
0
-

Skôr ExtraDateTime

A.
Člen | 87
+
0
-

Tomik napsal(a):
A pak další (možná) užitečná věc by byla formátování měn (tedy podle zvyklostí psaní dané měny), např. 30 Kč a $3.

Vyborne funguje money_format, ikdyz Windows uzivatele maji smulu :).

David Grudl
Nette Core | 8218
+
0
-

Tohle by asi nemělo (společně s bytes()) vůbec patřít do třídy String. Navíc je to závislé ná národním prostředí. Vzhledem k použití především v šablonách by asi bylo lepší udělat nějaký helper.

Tomik
Nette Evangelist | 485
+
0
-

David Grudl napsal(a):

Tohle by asi nemělo (společně s bytes()) vůbec patřít do třídy String. Navíc je to závislé ná národním prostředí. Vzhledem k použití především v šablonách by asi bylo lepší udělat nějaký helper.

Jsem pro udělat nějaký helper pro šablony, tak to také bylo zamýšleno, ale vzhledem k tomu, že jsem to shledal podobné fci String::bytes, tak jsem to přidal jako request pro třídu String, takže pokud by došlo k implementování v šablonách a přidání tam fce bytes a odebrání této ze třídy String, bylo by to ideální.

Jinak dík!

veena
Člen | 98
+
0
-

Tomik napsal(a):

Co bys říkal na podporu formátování lidského času do stylu „před hodinou“, „přes měsícem“, Davide?

Něco ve smyslu String->humanTime(datetime, int $date);

A pak další (možná) užitečná věc by byla formátování měn (tedy podle zvyklostí psaní dané měny), např. 30 Kč a $3.

Zdraví Tomik

Něco podobnýho jako ten humanTime jsem psal na téma časového intervalu, viz zde:

ale nevím jestli je to „změna času“ friendly.

http://www.martincohen.info/…iewtopic.php?…

Asi bych to taky spíš viděl pro nějaké helpery do šablon.

romansklenar
Člen | 655
+
0
-

Honza M. napsal(a):

Nette::Extras? Jakože by se tam založila nová třída ExtraString, která by tohle uměla? Tomu moc nerozumim.

Jod napsal(a):

Skôr ExtraDateTime

Spíše byl myšlen repozitář nette-extras který byl ale později nahrazen wiki stránkou [extras] pro pluginy atd.

honzajavorek
Člen | 57
+
0
-

Co do String přidat něco jako…

public static function upperFirst($s) {
	return mb_strtoupper(mb_substr($s, 0, 1)) . mb_substr($s, 1);
}

…? Podle mě je to užitečná funkce a v PHP chybí. Je tam jen ucfirst, ne mb_ucfirst. Mě to v nerozšiřitelné třídě String docela chybí a nějaké jiné vhodné místo jsem na to nenašel, tak jsem si tu funkci naprasil někam vedle. Takže kdyby byla přímo ve String, bylo by to super :) .

ZuseX4
Člen | 3
+
0
-

littlemaple napsal(a):

Co do String přidat něco jako…

public static function upperFirst($s) {
	return mb_strtoupper(mb_substr($s, 0, 1)) . mb_substr($s, 1);
}

Dalo by se využít toho malého tríčku, který jsem našel v ObjectMixin.php:

Line 187: $name[0] = $name[0] & "\xDF"; // case-sensitive checking, capitalize first character

Docela mě to zaujalo a myslím, že to bude rychlejší než rozdělování řetězce :)

Editoval ZuseX4 (7. 3. 2009 16:40)

kravčo
Člen | 721
+
0
-

ZuseX4 napsal(a):

Dalo by se využít toho malého tríčku, který jsem našel v ObjectMixin.php:

Line 187: $name[0] = $name[0] & "\xDF"; // case-sensitive checking, capitalize first character

Docela mě to zaujalo a myslím že to bude rychlejší, než rozdělování řetězce :)

Toto síce veľmi dobre funguje na písmenách v rámci ASCII (a-z, A-Z), no je to nepoužiteľné na iné znaky v rámci ASCII a už vôbec nie pre iné znaky vo väčšine známych kódovaní (UTF-8, cp1250, …), keďže sú buď viacbajtové, alebo neplatí, že 'á' − 'Á' == 0x20

David to používa s predpokladom, že má nazvané premenné/funkcie písmenami/podtržítkom v rámci ASCII, pričom PHP umožňuje nazvať premenné/funkcie i znakmi s diakritikou… Ale kto ich tak naozaj nazýva?

// Príklad, kódované v UTF-8
function bravčovéRažniči()
{
	echo '300 bravčového mäsa, ...';
}

Hypotetická funkcia String::upperFirst() by mala pracovať na akomkoľvek (UTF-8) reťazci, ktorý napríklad vôbec nemusí začínať písmenom… Predpokladám, že od PHP 5.3 bude možné pokryť všetky mb_* funkcie cez __callStatic.

Editoval kravco (7. 3. 2009 17:03)

David Grudl
Nette Core | 8218
+
0
-

Ještě existuje mb_convert_case($str, MB_CASE_TITLE, "UTF-8"), které převádí první písmenka všech slov na velké písmena, ostatní na malá.

kravčo
Člen | 721
+
0
-

David Grudl napsal(a):

Ještě existuje mb_convert_case($str, MB_CASE_TITLE, "UTF-8"), které převádí první písmenka všech slov na velké písmena, ostatní na malá.

Áno. Žiaľ v spracovaní českých/slovenských textov má oproti ucfirst() pramalé využitie… Sám som ju prednedávnom potreboval a použil som rovnaké riešenie, ako napísal littlemaple.