在模块位置回显Joomla组件变量

时间:2013-09-30 13:10:35

标签: php joomla joomla-component

我有一个自定义的Joomla项目组合组件,它输出以下代码(如下所示)。我想要做的是在同一页面上的模块中回显名称变量,但我当前的尝试没有奏效。这是可能的,如果是的话,我哪里错了?

我的组件default.php输出...

// no direct access
defined('_JEXEC') or die;

 //Load admin language file
 $lang = JFactory::getLanguage();
 $lang->load('com_portfolio', JPATH_ADMINISTRATOR);

?>
<?php if ($this->item) : ?>

<div class="item_fields">

    <ul class="fields_list">

                    <li><?php echo JText::_('COM_PORTFOLIO_FORM_LBL_TEMPLATE_ID'); ?>:
        <?php echo $this->item->id; ?></li>
        <li><?php echo JText::_('COM_PORTFOLIO_FORM_LBL_TEMPLATE_ORDERING'); ?>:
        <?php echo $this->item->ordering; ?></li>
        <li><?php echo JText::_('COM_PORTFOLIO_FORM_LBL_TEMPLATE_STATE'); ?>:
        <?php echo $this->item->state; ?></li>
        <li><?php echo JText::_('COM_PORTFOLIO_FORM_LBL_TEMPLATE_CHECKED_OUT'); ?>:
        <?php echo $this->item->checked_out; ?></li>
        <li><?php echo JText::_('COM_PORTFOLIO_FORM_LBL_TEMPLATE_CHECKED_OUT_TIME'); ?>:
        <?php echo $this->item->checked_out_time; ?></li>
        <li><?php echo JText::_('COM_PORTFOLIO_FORM_LBL_TEMPLATE_CREATED_BY'); ?>:
        <?php echo $this->item->created_by; ?></li>
        <li><?php echo JText::_('COM_PORTFOLIO_FORM_LBL_TEMPLATE_NAME'); ?>:
        <?php echo $this->item->name; ?></li>
        <li><?php echo JText::_('COM_PORTFOLIO_FORM_LBL_TEMPLATE_CUSTOM_CLASS'); ?>:
        <?php echo $this->item->custom_class; ?></li>
        <li><?php echo JText::_('COM_PORTFOLIO_FORM_LBL_TEMPLATE_CATEGORY'); ?>:
        <?php echo $this->item->category_title; ?></li>
        <li><?php echo JText::_('COM_PORTFOLIO_FORM_LBL_TEMPLATE_THUMB'); ?>:
        <?php echo $this->item->thumb; ?></li>
        <li><?php echo JText::_('COM_PORTFOLIO_FORM_LBL_TEMPLATE_IMAGE1'); ?>:
        <?php echo $this->item->image1; ?></li>
        <li><?php echo JText::_('COM_PORTFOLIO_FORM_LBL_TEMPLATE_IMAGE2'); ?>:
        <?php echo $this->item->image2; ?></li>
        <li><?php echo JText::_('COM_PORTFOLIO_FORM_LBL_TEMPLATE_IMAGE3'); ?>:
        <?php echo $this->item->image3; ?></li>
        <li><?php echo JText::_('COM_PORTFOLIO_FORM_LBL_TEMPLATE_IMAGE4'); ?>:
        <?php echo $this->item->image4; ?></li>
        <li><?php echo JText::_('COM_PORTFOLIO_FORM_LBL_TEMPLATE_DESCRIPTION'); ?>:
        <?php echo $this->item->description; ?></li>
        <li><?php echo JText::_('COM_PORTFOLIO_FORM_LBL_TEMPLATE_STATS'); ?>:
        <?php echo $this->item->stats; ?></li>
        <li><?php echo JText::_('COM_PORTFOLIO_FORM_LBL_TEMPLATE_DEMO_LINK'); ?>:
        <?php echo $this->item->demo_link; ?></li>
        <li><?php echo JText::_('COM_PORTFOLIO_FORM_LBL_TEMPLATE_BUY_LINK'); ?>:
        <?php echo $this->item->buy_link; ?></li>
        <li><?php echo JText::_('COM_PORTFOLIO_FORM_LBL_TEMPLATE_TAGS'); ?>:
        <?php echo $this->item->tags; ?></li>


    </ul>

</div>

我想做的是将名称变量回显到模块中 - 这就是我尝试过的......

<?php 
defined('_JEXEC') or die('Access Deny');
$lang = JFactory::getLanguage();
$lang->load('com_portfolio');
?>


<?php echo JText::_('COM_PORTFOLIO_FORM_LBL_TEMPLATE_NAME'); ?>:
<?php echo $item->name; ?>

组件运行正常,模块也有一个简单的hello world echo,所以我没有想法。

2 个答案:

答案 0 :(得分:0)

我找到了一个简单的解决方法。我只是设置一个会话

$session =& JFactory::getSession();
$session->set( 'myVar', $this->item->name ); 

并在我的模块中回应它......

<?php echo htmlspecialchars($session->get( 'myVar', 'empty' )); ?>

我不知道这是否是一种完全安全或有效的工作方式,但它现在至少起作用了。

答案 1 :(得分:0)

我建议使用模块中组件的模型。类似下面的代码可以获得模块中的项目

JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_portfolio/models', 'PortfolioModel');
$model = JModelLegacy::getInstance('Portfolio', 'PortfolioModel');
$model->getState();
// if you want to set a state
$model->setState('filter.category_id', $catid);
$item = $model->getItem();

在模型本身中,您可以缓存该项以防止第二次访问数据库。另一种解决方法。