Odstránenie persistentného parametra inej komponenty
- romiix.org
- Člen | 343
Zdravím, nedarí sa mi z URL odstrániť persistentný parameter cudzej komponenty. Je to vôbec možné?
Kompontna ItemsList obsahuje komponenty
- DataGrid
- ItemDetailPopup
DataGrid si ukladá filter do persistentných parametrov.
ItemDetailPopup má persistentný parameter ‚id‘
Ak nemá DataGrid žiadne nastavené filtre, všetko funguje ok –
vygeneruje sa url ‚?itemsList-itemDetailPopup-id=123‘
Ak má DataGrid nastavené filtre, vygeneruje sa url aj s parametrami datagridu
a spustia sa akcie nad gridom, ktoré v tomto stave nie sú potrebné a ešte
aj zhadzujú appku.
{dump $control->link('this', ['id' => 123, 'itemsList-dataGrid-perPage' => NULL])} // Vypíše parametre aj s parametrami DataGridu
Vďaka!
- romiix.org
- Člen | 343
use App;
use Kdyby\Events\Subscriber;
use Nette;
use Nette\Application\Application;
use Nette\Application\Request;
use Nette\Utils\Strings;
class RemoveParametersListener extends Nette\Object implements Subscriber
{
public function getSubscribedEvents()
{
return [
'Nette\Application\Application::onRequest',
];
}
public function onRequest(Application $application, Request $request)
{
$newParameters = $request->getParameters();
$removeKeys = [];
foreach ($request->getParameters() as $key => $value) {
if (Strings::endsWith($key, '_clearUrl')) {
$removeKeys = $value;
unset($newParameters[$key]);
}
}
foreach ($request->getParameters() as $key => $value) {
foreach ($removeKeys as $removeKey) {
if (Strings::startsWith($key, $removeKey)) {
unset($newParameters[$key]);
}
}
}
if (!empty($removeKeys)) {
$request->setParameters($newParameters);
}
}
}