Jump to content
We want to feature your community! ×

Community

Hook at the start of file


Go to solution Solved by bfarber,

Recommended Posts

I've created a custom static method in \IPS\Member:

	static function hello()
	{
		$hello = "something";
		
		return $hello;
	}

Now I need to retrieve it in a template:

{{$hello = \IPS\Member::hello();}}

but forums/topicRow template, where I'm working, start with a foreach and I can't hook before it to assign passing $hello.

I've found a dirty workaround but what is the best way to do it?

Link to comment
Share on other sites

You need to create a theme hook on the template and add the code in the beginning. So you'd set up a theme hook on forums -> front -> forums. Add one to topicRow.

Your selector will be li.ipsDataItem

Then you can insert php code before the selector. Something like

{{expression="\IPS\Member::hello();"}}

 

Link to comment
Share on other sites

<ips:template parameters="$table, $headers, $rows" />
{{$rowIds = array();}}
{{foreach $rows as $row}}
	{{$idField = $row::$databaseColumnId;}}
	{{$rowIds[] = $row->$idField;}}
{{endforeach}}
{{if \count( $rows )}}
	{{$rowCount=0;}}
	{{foreach $rows as $row}}
		{{if $rowCount == 1 AND $advertisement = \IPS\core\Advertisement::loadByLocation( 'ad_forum_listing' )}}
			<li class="ipsDataItem">
				{$advertisement|raw}
			</li>
		{{endif}}
		{{$rowCount++;}}
		{{$idField = $row::$databaseColumnId;}}
		{{if $row->mapped('moved_to')}}
			{{if $movedTo = $row->movedTo() AND $movedTo->container()->can('view')}}
				<li class="ipsDataItem">

If I've a query inside my hello() then if I hook on li.ipsDataItem I've
1 query x num topics 

Link to comment
Share on other sites

  • Solution

If I'm understanding you correctly, you want to hook in to the topicRow template before the foreach loop, is that right?

Create a theme hook on the appropriate template file, and this will create a plugin file in your plugin directory with nothing but a hookData() method in it. This plugin file extends the template code, so you can then manually define the topicRow template and call the parent like so

//<?php

/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
	exit;
}

class hook347 extends _HOOK_CLASS_
{

/* !Hook Data - DO NOT REMOVE */
public static function hookData() {
 return array_merge_recursive( array (), parent::hookData() );
}
/* End Hook Data */


public function topicRow( $table, $headers, $rows )
{
	// Do whatever you need to do here

	return parent::topicRow( $table, $headers, $rows );
}

}

 

Link to comment
Share on other sites

 Share

×
×
  • Create New...

Important Information

We use technologies, such as cookies, to customise content and advertising, to provide social media features and to analyse traffic to the site. We also share information about your use of our site with our trusted social media, advertising and analytics partners. See more about cookies and our Privacy Policy