editovanie dat z tabulky ulozene v premennej – ActiveRow read only

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
mrk
Člen | 8
+
0
-
<?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
+
0
-

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
+
0
-

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
+
+1
-

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}
hranicka
Člen | 23
+
0
-

Nemělo by to být nejdříve ještě escapované (když se na konci escapování zakazuje)?

{$result->content|escape|highlight:$searchTerm|noescape}
mrk
Člen | 8
+
0
-

Nevedel by si mi trochu priblížiť ako sa registruje ten filter a kde uložím tú funkciu poprípade nejaký odkaz ku dokumentácii kde by som si to pozrel?

vitkutny
Člen | 73
+
0
-

https://latte.nette.org/cs/#…

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().