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];

この URLindex.php?option=com_fewostar&view=paypal&task=paypal.paypaldetails&token=EC-92L7275685367793U&PayerID=TGWAUKNJLH2WL を実行すると、最初に var_dump($a); が表示されます。モデル上にありますが、2 番目の var_dump($results); views/paypal/tmpl/default.php にあり、表示されず、ビュー内のフィールドも表示されません。何らかの理由で、この URL はビューを呼び出しません。タスクなしでこの urlindex.php?option=com_fewostar&view=paypalコードを実行すると、view が表示されます。ただし、この 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 に答える