0

これが私の側のばかげた見落としであることを願っていますが、これに関する情報や、Laravelの同様の使用例に関する情報を見つけることはほとんどできませんでした. 私はLaravel 4サイトを開発しています.コンテンツにはローカルデータベースではなく、Tumblr APIを介して特定のTumblrブログからの投稿が含まれています.

すべてのTumblr投稿には特定のタイプ(「テキスト」、「ビデオ」、「写真」など)が関連付けられており、各タイプには吐き出す必要があるまったく異なるタイプのコンテンツがあるため、Bladeテンプレートを用意していますマスターpostBlade テンプレートから継承する各投稿タイプ。(現在、すべてが単なるスタブです。)

フロント ページを埋めるために、コントローラーで、これらの投稿ビュー ( ) を配列に入力しています$postViews。腹立たしいのは、コントローラーの$postViews個々のビューをループしてエコーアウトすると、適切なコンテンツが含まれていることです。配列内の 3 つのビューすべてが、正しいテンプレート内の最終サイトに表示されます。

しかし、私$postViewsが自分のwelcomeビューに送信し、そこにループスルー$postViewsすると、配列の最初のビューのみの 3 つのインスタンスがレンダリングされます。理由がわかりません。

関連するコードは次のとおりです。ウェルカム テンプレートでわかるように、$postViewsネイティブ PHP と Laravel テンプレート構文の両方を使用してウェルカム ビューをループしてみました。どちらも同じ動作を示します。3 つの投稿のうち最初の投稿のみを 3 回表示します。

// controllers/HomeController.php

class HomeController extends BaseController {

    public function showIndex()
    {
        $client = new Tumblr\API\Client(CONSUMERKEY, CONSUMERSECRET);
        $tumblrData = (array) ($client->getBlogPosts(BLOGNAME));
        $postViews = array();

        foreach ($tumblrData['posts'] as $post) {
            $post = (array) $post;
            $type = TumblrParse::getPostType($post);
            $postViews[] = View::make('tumblr.'.$type, array('post' => $post));
        }
        foreach ($postViews as $p){
            echo $p; 
                    // This works! It displays each post view properly before
                    // before rendering the welcome view, but I need them to 
                    // be inside the welcome view in a specific place.
        }
        return View::make('home.welcome')->with('postViews', $postViews);
    }


// views/home/welcome.blade.php

@extends('layouts.master')
@section('title')
    @parent :: Welcome
@stop
@section('content')
    <h1>Hello World!</h1>
        <?php 
            foreach($postViews as $p) {
                echo $p; // Just outputs the first of the array three times
            }
        ?>
        @foreach($postViews as $p)
            {{ $p }} // Just outputs the first of the array three times
        @endforeach
@stop


// views/layouts/post.blade.php

<div class="post">
@yield('postcontent')
</div>


// views/tumblr/photo.blade.php
// Other post types have their own views: video.blade.php, text.blade.php, etc.

@extends('layouts.post')
@section('postcontent')
    <h1>This is a photo post!</h1>
    <?php var_dump($post); ?>
@stop

どんな助けにも本当に感謝します!私はLaravelを初めて使用していますが、それは明らかです。そして、私が知っている限りでは、特にLaravelではなく、一般的にPHPで何か間違ったことをしています。

4

2 に答える 2

2

この場合、ビューの render メソッドを使用して $postViews 配列に追加する前に、各ビューを文字列としてレンダリングするのがおそらく理にかなっています。

$postViews[] = View::make('tumblr.'.$type, array('post' => $post))->render();
于 2013-05-25T02:44:34.387 に答える
0

ビューのネストについてはどうですか。ドキュメントを確認してください。

于 2013-05-25T21:09:48.940 に答える