2

我是 Zend FW 的新手。我希望在名为 Feedparsercontroller 的 indexAction 的控制器中编写一个简单的 feedparser。但我想在我的索引页面上将解析的提要输出显示为小部件。如何将输出/变量数据驱动到我的 indexview?

下面是我的解析器。

class FeedparserController extends Zend_Controller_Action {

public function init() {
    /* Initialize action controller here */
}

public function indexAction() {

    $feedUrl = 'http://feeds.feedburner.com/ZendScreencastsVideoTutorialsAboutTheZendPhpFrameworkForDesktop';
    $feed = Zend_Feed_Reader::import ( $feedUrl );

    $this->view->gettingStarted = array ();
    foreach ( $feed as $entry ) {
        if (array_search ( 'Getting Started', $entry->getCategories ()->getValues () )) {
            $this->view->gettingStarted [$entry->getLink ()] = $entry->getTitle ();
        }
    }
}

}

我想用我的登录实现相同的功能,也注册控制器。

4

3 回答 3

2

也许我没有完全理解你的问题。

但是,这里最好的方法似乎是创建一个单独的提要控制器,该控制器仅负责与提要相关的业务逻辑(检索、按摩、设置查看等)。

然后,创建一个包含 javascript 代码的部分来调用 feed 控制器,然后输出您想要的小部件。这可以很好地完成一些事情。

  1. 它集中了与提要相关的逻辑
  2. 它允许您将提要小部件放置在您想要的任何位置
  3. 这是一种 SOA 方法,通常是一件好事

希望这可以帮助!

于 2011-05-23T02:25:40.180 回答
1

我认为小部件的最佳逻辑是ajax

使用一些 js小部件库(例如可能是 jQuery ui),然后通过一些 ajax 查询加载这些小部件,返回 HTML,这也允许您重新加载简单的小部件行为(无需重新加载整个页面)。

在服务器端,您需要允许通过 ajax 请求调用您的控制器/操作并仅发送 html 片段(而不是包含所有布局的整个页面)。

为此,请检查ContextSwitch 和 AjaxContext Action Helpers。您将告诉您的 FeedparserController 可以在 XMLHHTTPRequest 中使用 /format/html 调用 index 操作,并且在这种情况下,视图助手将是 index.html。

在 init 部分你会说 indexAction 可以在 ajax 模式下调用,呈现 html 片段('html'):

$Ajaxcontext = $this->_helper->getHelper('AjaxContext');
$Ajaxcontext->addActionContext('index', 'html')
            ->initContext();

现在只需将您的视图脚本重命名feedparser/index.phtmlfeedparser/index.ajax.phtml

在 indexAction 中,做你的东西,在你的视图脚本上输出你想要的东西,不要考虑布局合成问题,你自己一个人处理自己的布局部分,合成是在 js 端完成的。

在 javascript 部分,确保您通过 ajax(可能是 $.load 或 $.ajax 与 jQuery)调用带有 format/html 作为参数添加的 url(所以http://example.com/feedparser/index/format/html )

请注意,在我看来,您应该使用 json 响应而不是 html,也许 json 里面有一些 html。但这是关于如何控制 ajax 通信(以及处理错误、重定向等,这是另一个主题)的问题。

于 2011-05-23T08:46:06.960 回答
0

视图助手呢?

您可以在 Zend Framework中阅读有关它的 View Helpers

于 2011-05-23T07:25:05.583 回答