【问题标题】:Silverstripe 3.4 load content via ajax / Shortcode issueSilverstripe 3.4 通过 ajax / Shortcode 问题加载内容
【发布时间】:2017-04-07 01:16:10
【问题描述】:

短代码无法正确呈现。

我正在通过 ajax 将内容加载到引导选项卡中。

调用 ajax 有效。

路线还可以。

我试过renderWith()、customise() ....

无论我尝试什么,短代码都不会呈现。请帮忙。

class EventPage_Controller extends Page_Controller {

public function EventDetail(SS_HTTPRequest $request){

        if($request){

            $group = DataObject::get_one('Group', "\"Code\" = 'eventgroup'");
            $member = Member::currentUser();
            if($member && $member->inGroup($group->ID)){

                if($event = DataObject::get_by_id('Event', intval($request->param('eventID')))){

                    $eventDetail = array(
                        'EventTitle' => $event->Name,
                        'EventContent' => $event->Content
                    );

                    /* if( Director::is_ajax() ) {

                        return $this->renderWith('EventDetail', json_encode(array('EventContent' => $event->Content)));
                    }*/
                    //return $this->customise($eventDetail)->renderWith(array('EventDetail', 'Page'));
                    //echo $event->Content;

                    echo  json_encode(array('error' =>  '0', 'EventContent' => $event->Content));

                }
            }
        }
    }

javascript:

$('#event-detail').hide();
        $('.event-detail-btn').on('click', function(e){
            //alert('click');
            e.stopPropagation();
            e.preventDefault();
            if($(this).parent().is('tr')){
                //alert('TR');
                var eventID = $(this).parent().attr('id').split('_')[1];
                var dateID = $(this).parent().attr('id').split('_')[2];
                //alert(eventID + '_' + dateID);
                getEventDetail(eventID, dateID);
            }
            $('#event-detail, #member-enrolment').toggle();
        });


        function getEventDetail(eventID, dateID){

            //$('#eventDetail').load('Enrolment/EventDetail/'+ eventID + '/' +dateID);

            $.ajax({
                type: "POST",
                url: 'Enrolment/EventDetail/'+ eventID + '/' +dateID,
                dataType: "json"
                }).success(function(msg){
                    $('#eventDetail').html(msg.EventContent);
            });
        }

页面.ss

<div id="enrolments" class="tab-pane fade">


        <% include EventDetail %>
        <% include MemberEnrolments %>


</div> <!--end enrolments-->

EventDetail.ss

<div id="event-detail">
    <br><br>
    <a href="#"><button type="button" class="event-detail-btn btn btn-default btn-sm">zurück</button></a>
    <br><br>

    <div id="eventDetail"></div>

    <a href="#"><button type="button" class="event-detail-btn btn btn-default btn-sm">zurück</button></a>
</div>

【问题讨论】:

    标签: ajax silverstripe


    【解决方案1】:

    当您不从模板调用它们时,不会自动呈现短代码,请尝试:

    $eventDetail = array(
        'EventTitle' => $event->Name,
        'EventContent' => $event->Content->forTemplate() //this is a HTMLText
    );
    

    或在 SS3.4 上:

    $eventDetail = array(
        'EventTitle' => $event->Name,
        'EventContent' => $event->Content->RAW() //this is a HTMLText
    );
    

    如果这仍然不起作用,您可能会很难做到并手动致电ShortcodeParser:

    ShortcodeParser::get_active()->parse($event->Content);
    

    另外,您可以使用Director::is_ajax() 来检查它是否真的是一个ajax 调用并输出ajax 响应或者——作为后备——包括ajax 内容的整个页面。见lessons或docs

    【讨论】:

    • 非常感谢! ShortcodeParser::get_active()->parse($event->Content) 成功了。这回答了我的问题并接受了。
    猜你喜欢
    • 2016-11-02
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多