2015-07-03 6 views
8

ich eine Variable mit diesem Inhalt habe "i want HTML"TWIG: Kapital macht andere Buchstaben klein

Als ich capitalize{{ variable|capitalize }} der Satz machen ist: "I want html"

Wie kann ich nur die ersten Buchstaben des Satzes groß in TWIG schreiben und die anderen bleiben wie sie sind !?

Antwort

7

Sie können create a new filter, die Ihre Zeichenfolge mit der PHP-Funktion ucfirst zurückgeben.

+0

Richtig, ich erstellte eine eigene Erweiterung wie es hier gezeigt: http://symfony.com/doc/current/cookbook/templating/twig_extension.html – Zwen2012

+0

Definitiv ein Weg zu gehen, obwohl ich einige Probleme mit 'Ucfirst' vorher hatte (hat nicht funktioniert, gab schließlich auf) –

1

Sie sollten das erste Wort des Satzes auswählen und nutzen nur nur sie:

{% set foo = "i want HTML" | split(' ', 2) %} 
{{ foo[0] | capitalize }} {{ foo[1] }}{% set foo = "i want HTML" | split(' ', 2) %} 
{{ foo[0] | capitalize }} {{ foo[1] }} 

Hoffnung hilfreich zu sein! Siehe ein Beispiel hier: link

+0

WHe Ich habe einen Satz wie "zurück zu HTML" die Ausgabe mit Ihrem Vorschlag ist "Zurück". Die anderen Wörter werden gelöscht – Zwen2012

+0

Ok, sorry, Sie sollten die Zeichenfolge anfügen.Versuchen Sie es so: {% set foo = "Ich möchte html" | split ('', 2)%} {{foo [0] | Großschreibung}} {{foo [1]}} –

+0

Das Problem ist, dass es nicht mit nur einem Wort funktioniert. Es gibt also einen Fehler, weil Schlüssel "1" nicht existiert. Ich denke, es ist zu kompliziert in Zweig für nur Schreiben des ersten Buchstabens in Großbuchstaben – Zwen2012

-1

Die folgende Lösung wird für jede Phrase arbeiten, aber es wird die „HTML“ Wort und nicht andere Abkürzungen nur beheben, die zu festgelegten kann es erforderlich sein:

{{ variable|capitalize|replace({ 'html': 'HTML' }) }} 
3

ucfirst Ok, aber nicht verarbeitet Akzente richtig. Also mein ucfirst Filter so aussieht:

/** 
* ucfirst with handling of accents. 
* 
* @param string $value 
* @param string $encoding 
* 
* @return string 
*/ 
public function ucfirst($value, $encoding = 'UTF8') 
{ 
    $strlen = mb_strlen($value, $encoding); 
    $firstChar = mb_substr($value, 0, 1, $encoding); 
    $then = mb_substr($value, 1, $strlen - 1, $encoding); 

    return mb_strtoupper($firstChar, $encoding) . $then; 
} 

-

$test1 = $this->container->get('app.twig.text.extension')->ucfirst('i want HTML'); 
$test2 = $this->container->get('app.twig.text.extension')->ucfirst('éllo'); 
dump($test1, $test2); die(); 

Will Ausgang:

"I want HTML" 
"Éllo" 

Das gleiche mit ucfirst AUSGABE:

"I want HTML" 
"éllo" 
+0

könnte auch implementieren ** needs_environment **, um mit der globalen Env-Codierung zu arbeiten – MediaVince

5

einfach eine gute Zweig der Praxis Lösung zu veranschaulichen, können Sie eine benutzerdefinierte Dienstprogramme Zweig Erweiterung erstellen und Multibyte String (mb) für Strings mit Akzenten beginnen, sollten Sie richtig funktioniert:

use Twig_SimpleFilter; 

class UtilitiesExtension extends \Twig_Extension 
{ 
    public function getFilters() 
    { 
     return array(
      new Twig_SimpleFilter('ucfirst', 
       array($this, 'ucFirst'), array('needs_environment' => true) 
      ), 
     ); 
    } 

    public function ucFirst(Twig_Environment $env, $string) 
    { 
     if (null !== $charset = $env->getCharset()) { 
      $prefix = mb_strtoupper(mb_substr($string, 0, 1, $charset), $charset); 
      $suffix = mb_substr($string, 1, mb_strlen($string, $charset)); 
      return sprintf('%s%s', $prefix, $suffix); 
     } 
     return ucfirst(strtolower($string)); 
    } 
} 

Dann können Sie solche Filter aus einer Zweigdatei auf dem Weg aufrufen. Akzente auch arbeiten:

{{ 'étudiant de PHP' | ucfirst }} 

Ergebnisse in: "Étudiant de PHP"

0

Sie einen Filter erstellen kann sehr leicht für ucfirst():

//in PHP - during setup 
$twig->addFilter(new \Twig_SimpleFilter('ucfirst', 'ucfirst')); 

//in Twig usage 
{% set variable = 'i want html' %} 
{{ variable|ucfirst }} //output: "I want html" 

Sie können einen Filter erstellen, wenn Sie verwenden möchten, strtoupper() auf "HTML"

+0

Dies produziert nicht die gewünschte Ausgabe. – tremby

+0

@tremby korrigiert, ich habe die Frage falsch gelesen. Danke, dass du auf meinen Fehler hingewiesen hast. – IROEGBU