Odstránenie persistentného parametra inej komponenty

romiix.org
Člen | 343
+
0
-

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
+
0
-
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);
		}
	}
}