šablony – case insensitive replace
- MzK
- Člen | 127
Potřeboval bych nahrazovat, ale helper replace mi nestačí, tak si
zaregistroval nový:
$this->template->registerHelper('ireplace', 'str_ireplace');
Ale to mi nefunguje:
Šablona:
<?php
<td>{!$d->domena|ireplace:$searchString:'<span style="background-color:yellow;">'.$searchString.'</span>'}</td>
?>
Po zkompilování to je:
<?php
echo $template->ireplace($d->domena, $searchString, '<span style="background-color:yellow;">'.$searchString.'</span>')
?>
Což by mělo být dobře? Bohužel to udělá to, že to nahradí všechno
cokoliv výrazem
<span style="background-color:yellow;">'.$searchString.'</span>
I když se to neschoduje…
Napadlo mě ještě použít replacere, ale regulární výrazy neumím a
v tomto případě jsou zbytečné…
Otázkou tedy je, jak v šabloně nahradit hledaný výraz výrazem, aby
nezáleželo na velikosti písmen..
str_ireplace
- MzK
- Člen | 127
Po zkompilování by to mělo vypadat takto:
<?php
echo str_ireplace($searchString, '<span style="background-color:yellow;">'.$searchString.'</span>', $d->domena); ?>
?>
Takže je tam trochu jiné pořadí parametrů, ale já neumím nějak docílit správného pořadí, rád bych aby bylo stejné, jako u |replace tak i u |ireplace.
- MzK
- Člen | 127
VYŘEŠENO:
<?php
<td>{!$d->domena|ireplace:$searchString:'<span style="background-color:yellow;">'.$searchString.'</span>'}</td>
vs
<td>{!$searchString|ireplace:'<span style="background-color:yellow;">'.$searchString.'</span>':$d->domena}</td>
?>
Šlo jen o prohození těch parametrů…
Blbý je, že u ireplace to funguje normálně takto:
<?php
<td>{!$d->domena|replace:$searchString:'<span style="background-color:yellow;">'.$searchString.'</span>'}</td>
?>
- toka
- Člen | 253
Vlož ji tak, aby ji nalezl RobotLoader, např. takto:
<?php
class MyHelper {
public static function ireplace($string, $search, $replace) {
return str_ireplace($search, $replace, $string);
}
}
A pak mám v BasePresenter.php
toto:
...
protected function createTemplate() {
$template = parent::createTemplate();
$template->registerHelper('ireplace', 'MyHelper::ireplace');
return $template;
}
...
Opět se nechám poučit od zkušenějších, pokud dělám něco špatně – ale funguje to :-)