editovanie dat z tabulky ulozene v premennej – ActiveRow read only
- mrk
- Člen | 8
<?php
$upraveneVysledkyHladania = $this->connection->table("tabulka");
?>
Do premennej $upraveneVysledkyHladania som si vložil tabulku, túto premennú by som chcel nasledovne editovať
<?php
foreach ($this->upraveneVysledkyHladania as $vysledok) {
$term_escaped = preg_quote($this->hladanyVyrazVysledky);
$vysledok->stlpec = preg_replace("~$term_escaped~i", '<b>\0</b>', $vysledok->stlpec);
}
?>
ale vyhodí to ActiveRow read only
Mohli by ste mi poradiť akým spôsobom uložiť tie data z tabuľky aby som ich mohol upraviť? Poprípade aký dátový typ použiť na uloženie tabuľky?
- hranicka
- Člen | 23
Jaký význam má mít ten kód? Předpokládám, že to nechceš při
každém průchodu cyklem ukládat do DB.
Ani nevím proč chceš dělat takovou úpravu, proč nevypíšeš
v šabloně<b>{$vysledok->stlpec}</b>
?
Jinak update můžeš provádět buď přímo na ActiveRow (https://api.nette.org/…tiveRow.html):
$vysledok->update([
'stlpec' => preg_replace("~$term_escaped~i", '<b>\0</b>', $vysledok->stlpec),
]);
Nebo přes Selection (https://api.nette.org/…lection.html) např. v nějakém Repository:
$this->dbContext->table('tabulka')->where('id', $id)->update([
'stlpec' => preg_replace("~$term_escaped~i", '<b>\0</b>', $stlpec),
]);
- mrk
- Člen | 8
Ja práve nechcem upravovať tie data v DB. Chcem si uložiť tú tabuľku(výsledok dotazu) do nejakej premennej v nej si to editovať a takto editovanú premennú foreachom prejsť v latte a vypísať.
Dôvod prečo to robím: Chcem na stránke zvýrazniť vyhľadávaný reťazec. Chcem vytiahnuť tie data z DB editovať tzn. vyhľadávaný reťazec vložiť do nejakeho tagu a potom to neescapovať pri výpise v latte. Nič lepšie ma nenapadlo :/
- vitkutny
- Člen | 73
Zaregistruj si latte filter ‚highlight‘:
public static function highlight($string, $term, $tag = 'b') {
return preg_replace('~' . preg_quote($term) . '~i', '<' . $tag . '>\0</' . $tag . '>', $string);
}
Použití v latte:
{$result->content|highlight:$searchTerm|noescape}
{$result->content|highlight:$searchTerm, i|noescape}
- vitkutny
- Člen | 73
protected function createTemplate($class = NULL) {
$template = parent::createTemplate($class);
$template->addFilter('highlight', function ($string, $term, $tag = 'b') {
return preg_replace('~' . preg_quote($term) . '~i', '<' . $tag . '>\0</' . $tag . '>', $string);
});
return $template;
}
tohle ale musíš uvést všude kde to chceš použít, nebo v nějakým
BasePresenter a BaseControl.
jinak pokud používáš rozšíření DI kontejneru tak si můžeš vytáhnout
definici nette.latteFactory a přidat callback na filter pomocí addSetup().