Jump to content

Dispatcher not working as expected in blocks.


snugRugBug

Recommended Posts

Posted

I've created a block that shows popular records for a certain database. Now I want that block to NOT display when the user is viewing a record. So I would like to add logic that hides the block if we are on a record page.

Usually, I would just use the dispatcher like this:

{{$dispatcher = \IPS\cms\Databases\Dispatcher::i();}}
{{if !$dispatcher->recordId}}

	{{/* block content here */}}

{{endif}}

The problem is that the dispatcher does not reflect the page the user is currently seeing. On a page were a user sees a record, the a dump of the dispatcher from within the block looks like this:

Object(IPS\cms\Databases\Dispatcher)#106 (9) { 
	["controllerLocation"]=> string(5) "front" 
	["databaseId"]=> int(6) 
	["categoryId"]=> NULL 
	["recordId"]=> NULL 
	["url"]=> NULL 
	["module"]=> NULL
	["output"]=> NULL 
	["classname":protected]=> NULL 
	["dispatcherController"]=> NULL 
} 

One would expect the category and record id to be set, but they aren't.

Also, calling \IPS\Request::i() isn't much use:

object(IPS\Request)#4 (3) { 
	["cookie"]=> array(7) { 
		["IPSSessionFront"]=> string(32) "1234567890123456789012345678901" 
		["IPSSessionAdmin"]=> string(32) "1234567890123456789012345678901" 
		["acpTabs"]=> string(93) "{"core":[],"community":[],"members":[],"nexus":[],"content":[],"stats":[],"customization":[]}" 
		["hasJS"]=> string(4) "true" 
		["member_id"]=> string(1) "1" 
		["pass_hash"]=> string(32) "fc725df66df9a155b5d1b5079071781f" 
		["ipsTimezone"]=> string(19) "Africa/Johannesburg" 
	} 
	["_url":protected]=> object(IPS\Http\Url)#6 (5) { 
	["url":protected]=> string(201) "http://mysite.com/index.php?app=cms&module=pages&controller=builder&do=getBlock&blockID=app_cms_Blocks_acbupkzwu&pageID=5&orientation=vertical&csrfKey=1234567890123456789012345678901"
	["data"]=> array(4) { 
		["scheme"]=> string(4) "http" 
		["host"]=> string(28) "mysite.com" 
		["path"]=> string(10) "/index.php" 
		["query"]=> string(155) "app=cms&module=pages&controller=builder&do=getBlock&blockID=app_cms_Blocks_acbupkzwu&pageID=5&orientation=vertical&csrfKey=1234567890123456789012345678901" } 
		["queryString"]=> array(8) { 
			["app"]=> string(3) "cms" 
			["module"]=> string(5) "pages" 
			["controller"]=> string(7) "builder" 
			["do"]=> string(8) "getBlock" 
			["blockID"]=> string(24) "app_cms_Blocks_acbupkzwu" 
			["pageID"]=> string(1) "5" 
			["orientation"]=> string(8) "vertical" 
			["csrfKey"]=> string(32) "1234567890123456789012345678901" 
		} 
		["isInternal"]=> bool(true) 
		["isFriendly"]=> bool(false) 
	} 
	["data":protected]=> array(8) { 
		["app"]=> string(3) "cms" 
		["module"]=> string(5) "pages" 
		["controller"]=> string(7) "builder" 
		["do"]=> string(8) "getBlock" 
		["blockID"]=> string(24) "app_cms_Blocks_acbupkzwu" 
		["pageID"]=> string(1) "5" 
		["orientation"]=> string(8) "vertical" 
		["csrfKey"]=> string(32) "1234567890123456789012345678901" 
	} 
}

Any way to get the correct dispatcher/request object?

  • 1 month later...
Posted

Also looking for how to achieve differentiating between category levels in widgets since the Dispatcher doesn't work as it does on templates to achieve this.

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...