0

我有一个名为 mycomponent 的组件

模型 paypal.php

控制器 paypal.php

意见

贝宝 view.html.php index.html

tmpl(文件夹) default.php index.html

在控制器中我有这个代码

 <?php


// No direct access.
defined('_JEXEC') or die;


jimport('joomla.application.component.controlleradmin');

/**
 * Objectdefects list controller class.
 */
class MycomponentControllerPaypal extends JControllerAdmin
{
         public function paypaldetails()
    {
        $model = $this->getModel('paypal');
        // Get token
                $token = urlencode(htmlspecialchars(JRequest::getVar('token')));
        if (!$token)
        {
            // Missing $token parameter
            $app = JFactory::getApplication();
            $app->enqueueMessage(JText::_('COM_INSTALLER_MSG_MISSING_TOKEN'));
        }
        else
        {
            // Install plugin
            $model->paypaldetails($token);
        }
    }
}

在模型中,我有这段代码

 public function paypaldetails($token){
            $environment=  $this->environment;
            // Add request-specific fields to the request string.
           $nvpStr = "&TOKEN=$token";
// Execute the API operation; see the PPHttpPost function above.
$httpParsedResponseAr = $this->PPHttpPost('GetExpressCheckoutDetails', $nvpStr);
//var_dump($httpParsedResponseAr);
if("SUCCESS" == strtoupper($httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($httpParsedResponseAr["ACK"])) {

    $paypaldetails=array();
        $paypaldetails["firstname"]= $httpParsedResponseAr['FIRSTNAME'];
        $paypaldetails["lastname"]  = $httpParsedResponseAr["LASTNAME"];
        $paypaldetails["countrycode"] = $httpParsedResponseAr["COUNTRYCODE"];
       $this->paypaldetails=$paypaldetails;
       $a=$this->paypaldetails;
       var_dump($a);
} else  {
    exit('GetExpressCheckoutDetails failed: ' . print_r($httpParsedResponseAr, true));
}
        }

在 view/template/default.php 我有这个

<?php
// no direct access
defined('_JEXEC') or die;
// Import CSS
$document = JFactory::getDocument();
$document->addStyleSheet('components/com_mycomponent/assets/css/defects.css');
        $results = $this->items;
        var_dump($results);
        echo 'Firstname: '.$results[firstname];
        echo '<br>Lastname: '.$results[lastname];
        echo '<br>Countrycode: '.$results[countrycode];

当我运行这个网址时index.php?option=com_fewostar&view=paypal&task=paypal.paypaldetails&token=EC-92L7275685367793U&PayerID=TGWAUKNJLH2WL ,我首先查看 var_dump($a); 位于模型上,但第二个 var_dump($results); 位于views/paypal/tmpl/default.php 中不显示,视图中的字段不显示。出于任何原因,此 url 不调用视图。当我在没有任务的情况下运行此 urlindex.php?option=com_fewostar&view=paypal代码时,会显示视图。但是对于这个 url index.php?option=com_fewostar&view=paypal&task=paypal.paypaldetails&token=EC-92L7275685367793U&PayerID=TGWAUKNJLH2WL没有显示视图。我如何为这个任务调用视图,可能我需要其他视图文件,不同于 default.php?

4

2 回答 2

3

我在这里看到了几个问题。首先,代码并没有完全使用 Joomla MVC 风格(即使它适合你,对于熟悉 Joomla 的人来说可能更难调试)。

应该调用模型方法getPaypaldetails并返回一些东西

public function getPaypaldetails()
{
    // For Joomla 1.7+ use JInput instead of JRequest (deprecated)
    $token = JFactory::getApplication()->input->getVar('token');

    // some code

    return $paypaldetails;
}

view.html.php 应该并从模型中获取数据并分配给自己

public function display($tpl = null)
{
    // Get some data from the models
    $items = $this->model->get('paypaldetails');

    // If data are incorrect, show nice error message
    // ...

    $this->items = $items;
}

视图布局文件应该放在/com_fewostar/views/paypal/tmpl/default.php

于 2013-03-22T09:59:26.853 回答
1

默认情况下,视图仅由“显示”任务(这是默认任务)调用。由于您使用自己的任务,因此您需要在任务完成后重定向到视图或尝试在最后加载显示功能。

于 2013-03-22T09:56:44.483 回答