Cupara
Well-known member
Is it possible to do a foreach when using a template hook in the 'message' template? Every time I try it gives me an error that the BbCode_TextWrapper is already in use and cannot be used again.
Go figure, anyway, not sure how else to go about it. I am using a Listener for Post and a Model.
Here is my listener:
Here is my model:
Go figure, anyway, not sure how else to go about it. I am using a Listener for Post and a Model.
Here is my listener:
PHP:
class xShop_Listener_Post
{
/**
* If we are getting the post model, extend it with our custom class that holds a method
* for the images.
*
* @param string The name of the class to be created
* @param array A modifiable list of classes that wish to extend the class.
*/
public static function listen($class, array &$extend)
{
if ($class == 'XenForo_Model_Post')
{
$extend[] = 'xShop_Model_Post';
}
}
}
Here is my model:
PHP:
/**
* Model for posts.
*
* @package xShop
*/
class xShop_Model_Post extends XFCP_xShop_Model_Post
{
/**
* Constants to allow joins to extra tables in certain queries
*
* @var integer Join xShop tables
*/
const FETCH_XSHOP = 0x60;
/**
* Gets the specified posts - extended to include thread ban info
*
* @param array $postIds
* @param array $fetchOptions Collection of options that relate to fetching
*
* @return array Format: [post id] => info
*/
public function getPostsByIds(array $postIds, array $fetchOptions = array())
{
if (!empty($fetchOptions['join']))
{
$fetchOptions['join'] |= self::FETCH_XSHOP;
}
else
{
$fetchOptions['join'] = self::FETCH_XSHOP;
}
return parent::getPostsByIds($postIds, $fetchOptions);
}
/**
* Extended to process thread ban joins
* Checks the 'join' key of the incoming array for the presence of the FETCH_x bitfields in this class
* and returns SQL snippets to join the specified tables if required
*
* @param array $fetchOptions containing a 'join' integer key build from this class's FETCH_x bitfields
*
* @return array Containing 'selectFields' and 'joinTables' keys. Example: selectFields = ', user.*, foo.title'; joinTables = ' INNER JOIN foo ON (foo.id = other.id) '
*/
public function preparePostJoinOptions(array $fetchOptions)
{
$joinOptions = parent::preparePostJoinOptions($fetchOptions);
if (!empty($fetchOptions['join']))
{
if ($fetchOptions['join'] & self::FETCH_XSHOP)
{
$selectFields = ',
stock.member_id AS stockMember,
stock.item_id AS stockItemId,
stock.stock_id AS stockId,
item.item_id AS itemId,
item.item_img AS itemImg';
$joinTables = '
LEFT JOIN xshop_stock AS stock ON(stock.member_id = post.user_id)
LEFT JOIN xshop_items AS item ON(item.item_id = stock.item_id)';
$joinOptions['selectFields'] .= $selectFields;
$joinOptions['joinTables'] .= $joinTables;
}
}
return $joinOptions;
}
/**
* Returns all posts for a specified thread. Fetch options may limit
* posts returned. Extended to include thread bans
*
* @param integer $threadId
* @param array $fetchOptions Collection of options that relate to fetching
*
* @return array
*/
public function getPostsInThread($threadId, array $fetchOptions = array())
{
if (!empty($fetchOptions['join']))
{
$fetchOptions['join'] |= self::FETCH_XSHOP;
}
else
{
$fetchOptions['join'] = self::FETCH_XSHOP;
}
return parent::getPostsInThread($threadId, $fetchOptions);
}
}