将博客条目的ID传递给博客持有者方法

时间:2015-07-13 13:28:56

标签: php silverstripe

我正在使用SilverStripe的博客模块。在博客持有者模板中,有一个循环遍历每个博客条目。我无法在此循环中从博客条目运行任何方法,我只能运行博客持有者方法。所以..我想将当前博客条目的ID传递给我写的博客持有人方法,以便我可以从博客条目中检索AuthorID(我添加的自定义字段)。

我试过了

BlogHolder.php

function getAuthor($identity) {
    $Author = DataObject::get_by_id('Person', $identity);
}

BlogHolder.ss

<p id="author-tag">By $getAuthor($ID)</p>

我还尝试传递一个直接整数用于测试目的,这也返回了一个关于$ identity变量未定义的错误,所以看起来根本没有传递给该方法。

我收到的错误是

  

[警告]缺少BlogHolder_Controller :: getAuthor()的参数1,在第108行的/var/www/sites/quadra/framework/view/ViewableData.php中调用并定义

以及

  

[注意]未定义变量:identity

还有..

  

[用户警告] DataObject :: get_by_id传递了非数字ID #DataList

所以这里的问题实际上是:在博客持有人模板的博客条目循环中,如何将当前博客条目的ID传递给博客持有者控制器中的方法。

谢谢你们。

2 个答案:

答案 0 :(得分:1)

我猜你正在使用SilverStripe Blog module 1.0 branch用于SilverStripe 3.1。

  

我无法在此循环中运行博客条目中的任何方法,我只能运行博客持有者方法。

您应该能够调用BlogEntry类中的所有BlogEntry变量和函数。您无法从BlogHolder页面调用BlogEntry_Controller函数,但您可以调用所有BlogEntry变量和函数。

BlogEntryAuthor中有一个$db文字变量,因此您应该可以在博客条目循环中调用$Author

您可以使用博客模块附带的模板。这将显示诸如条目作者,标签,摘要,日期等信息。

或者,如果您想创建自己的自定义模板,则可以查看现有模板作为参考。

这是当前1.0分支博客持有者模板以及它如何循环其条目。

<强> BlogHolder.ss

<% include BlogSideBar %>

<div id="BlogContent" class="blogcontent typography">

    <% include BreadCrumbs %>

    <% if SelectedTag %>
        <h3><% _t('BlogHolder_ss.VIEWINGTAGGED', 'Viewing entries tagged with') %> '$SelectedTag'</h3>
    <% else_if SelectedDate %>
        <h3><% _t('BlogHolder_ss.VIEWINGPOSTEDIN', 'Viewing entries posted in') %> $SelectedNiceDate</h3>
    <% else_if SelectedAuthor %>
        <h3><% _t('BlogHolder_ss.VIEWINGPOSTEDBY', 'Viewing entries posted by') %> $SelectedAuthor</h3>
    <% end_if %>

    <% if BlogEntries %>
        <% loop BlogEntries %>
            <% include BlogSummary %>
        <% end_loop %>
    <% else %>
        <h2><% _t('BlogHolder_ss.NOENTRIES', 'There are no blog entries') %></h2>
    <% end_if %>

    <% include BlogPagination %>

</div>

在BlogEntries循环中,它包含每个条目的模板BlogSummary.ss。

<强> BlogSummary.ss

<div class="blogSummary">
    <h2 class="postTitle"><a href="$Link" title="<% _t('BlogSummary_ss.VIEWFULL', 'View full post titled -') %> '$Title'">$MenuTitle</a></h2>
    <p class="authorDate"><% _t('BlogSummary_ss.POSTEDBY', 'Posted by') %> $Author.XML <% _t('BlogSummary_ss.POSTEDON', 'on') %> $Date.Long | <a href="$Link#comments-holder" title="View Comments Posted">$Comments.Count <% _t('BlogEntry_ss.COMMENTS', 'Comments') %></a></p>
    <% if TagsCollection %>
        <p class="tags">
            <% _t('BlogSummary_ss.TAGS','Tags') %>:
            <% loop TagsCollection %>
                <a href="$Link" title="View all posts tagged '$Tag'" rel="tag">$Tag</a><% if not Last %>,<% end_if %>
            <% end_loop %>
        </p>
    <% end_if %>

    <% if BlogHolder.ShowFullEntry %>
        $Content
    <% else %> 
        <p>$Content.FirstParagraph(html)</p>
    <% end_if %>

    <p class="blogVitals">
        <a href="$Link#comments-holder" class="comments" title="View Comments for this post">
            $Comments.Count <% _t('BlogSummary_ss.SUMMARYCOMMENTS','comment(s)') %>
        </a> 
        | 
        <a href="$Link" class="readmore" title="Read Full Post">
            <% _t('BlogSummary_ss.READFULLPOST','Read the full post') %>
        </a>
    </p>
</div>

在BlogSummary中,您可以看到$ Author和$ Date.Long等项目。

像这样创建模板。您不需要在BlogHolder中调用传入条目ID的函数。

答案 1 :(得分:0)

假设BlogEntry与Author之间存在has_one关系,您应该能够将<p id="author-tag">$Author.Name</p>放入模板中