2016-11-23 2 views
1

Шрифты не отображаются правильно.Silverstripe 3.4 Загрузка содержимого с помощью ajax/Shortcode issue

Я загружаю контент через ajax в bootstrap-tabs.

звание 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); 
      }); 
     } 

Page.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> 

enter image description here

ответ

0

Шорткоды не автоматически отображается, когда вы не называя их по шаблону, попробуйте:

$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

+0

Большое спасибо! ShortcodeParser :: get_active() -> parse ($ event-> Content) сделал трюк. Это отвечало на мой вопрос и принималось. –

Смежные вопросы