Движок Phalcon Volt генерирует ошибку в блоке jQuery при использовании условного выражения elseif

Я получаю странную ошибку PHP при использовании движка Phalcon Volt в моем проекте. Случай кажется очень простым, но, хотя я проверял свой код много раз, я не могу заставить работать простую структуру if-elseif-endif.

Код шаблона находится здесь, он помещается в блок Javascript в контексте функции callcack jQuery:

{% if table.form.rendered_in == 'offcanvas' %}
//offcanvas form
//set attributes

$(row).find('td.edit-control').

attr('data-source', '{{table.form.full_action_url}}?get_form').
attr('data-canvas', 'body').
attr('data-target', '#rightSlider').
attr('data-toggle', 'offcanvas').

click(function () {
console.log('! show edit form: '+record_id);
//edit_one(record_id);
if (!right_offcanvas_visible) {

//request form with ajax
var url = $(this).attr('data-source');
var data = {
'choose_record': [record_id]
};

//console.log('Serialized data: '+data);
//$('div#rightSlider').offcanvas('show');
TASK.Ajax.Post(url, data, function(response) {
$('div#rightSlider').find('div.rightSliderContent').html(response);
//$('div.offcanvas').offcanvas({canvas: 'body'}); // todo: make it work!
console.log('! edit one record form set up');
});

}

});

//delete
$(row).find('td.delete-control').

attr('data-source', '{{table.form.full_action_url}}?get_delete_form').
attr('data-canvas', 'body').
attr('data-target', '#rightSlider').
attr('data-toggle', 'offcanvas').

click(function () {
if (!right_offcanvas_visible) {

//request form with ajax
var url = $(this).attr('data-source');
var data = {
'choose_record': [record_id]
};

TASK.Ajax.Post(url, data, function(response) {
$('div#rightSlider').find('div.rightSliderContent').html(response);
});

}

});

{% elseif table.form.rendered_in == 'page' %}
//on same page above the table

$(row).find('td.edit-control').
attr('data-source', '{{table.form.full_action_url}}?get_form').
click(function () {
console.log('! show edit form above table: '+record_id);
var url = $(this).attr('data-source');
var data = {
'choose_record': [record_id]
};

TASK.Ajax.Post(url, data, function(response) {
$('div#form-page-main').html(response);
$('html, body').animate({ //scroll smoothly to form
scrollTop: $('div#form-page-main').offset().top - config.scrollDistanceFromTop
}, config.timeAnimateToAjaxForm);
});

});$(row).find('td.delete-control').
attr('data-source', '{{table.form.full_action_url}}?get_delete_form').
click(function () {
console.log('! show delete form above table: '+record_id);
var url = $(this).attr('data-source');
var data = {
'choose_record': [record_id]
};

TASK.Ajax.Post(url, data, function(response) {
$('div#form-page-main').html(response);
$('html, body').animate({ //scroll smoothly to confirmation
scrollTop: $('div#form-page-main').offset().top - config.scrollDistanceFromTop
}, config.timeAnimateToAjaxForm);
});

});

{% elseif table.form.rendered_in == 'modal' %}
// rendered in modal window

$(row).find('td.edit-control').
attr('data-source', '{{table.form.full_action_url}}?get_form').
attr('data-target', '#largeModal').
attr('data-toggle', 'modal').
click(function () {
console.log('! show edit form in modal: '+record_id);
var url = $(this).attr('data-source');
var data = {
'choose_record': [record_id]
};

TASK.Ajax.Post(url, data, function(response) {
$('div#largeModal').find('div.modal-body').html(response);
});

});$(row).find('td.delete-control').
attr('data-source', '{{table.form.full_action_url}}?get_delete_form').
attr('data-target', '#smallModal').
attr('data-toggle', 'modal').
click(function () {
console.log('! show delete form in modal: '+record_id);
var url = $(this).attr('data-source');
var data = {
'choose_record': [record_id]
};

TASK.Ajax.Post(url, data, function(response) {
$('div#smallModal').find('div.modal-body').html(response);
});

});

{% endif %}

Возможно, ошибка генерируется компилятором Volt при первом обращении ниже, если файл volt не скомпилирован в PHP.

{% elseif table.form.rendered_in == 'page' %}

Ошибка говорит:
Неожиданный ENDIF в … / app / views / partials / grideditor.volt в строке 307

Структура if-elseif-endif хорошо работает в других местах в блоках Javascript. Что делает вещи еще более странными, так это то, что когда я заменяю elseif множественными if-endif, if-endif, … как показано ниже, все работает нормально.

{% if table.form.rendered_in == 'offcanvas' %}
//offcanvas form
//set attributes

$(row).find('td.edit-control').

attr('data-source', '{{table.form.full_action_url}}?get_form').
attr('data-canvas', 'body').
attr('data-target', '#rightSlider').
attr('data-toggle', 'offcanvas').

click(function () {
console.log('! show edit form: '+record_id);
//edit_one(record_id);
if (!right_offcanvas_visible) {

//request form with ajax
var url = $(this).attr('data-source');
var data = {
'choose_record': [record_id]
};

//console.log('Serialized data: '+data);
//$('div#rightSlider').offcanvas('show');
TASK.Ajax.Post(url, data, function(response) {
$('div#rightSlider').find('div.rightSliderContent').html(response);
//$('div.offcanvas').offcanvas({canvas: 'body'}); // todo: make it work!
console.log('! edit one record form set up');
});

}

});

//delete
$(row).find('td.delete-control').

attr('data-source', '{{table.form.full_action_url}}?get_delete_form').
attr('data-canvas', 'body').
attr('data-target', '#rightSlider').
attr('data-toggle', 'offcanvas').

click(function () {
if (!right_offcanvas_visible) {

//request form with ajax
var url = $(this).attr('data-source');
var data = {
'choose_record': [record_id]
};

TASK.Ajax.Post(url, data, function(response) {
$('div#rightSlider').find('div.rightSliderContent').html(response);
});

}

});

{% endif %}{% if table.form.rendered_in == 'page' %}
//on same page above the table

$(row).find('td.edit-control').
attr('data-source', '{{table.form.full_action_url}}?get_form').
click(function () {
console.log('! show edit form above table: '+record_id);
var url = $(this).attr('data-source');
var data = {
'choose_record': [record_id]
};

TASK.Ajax.Post(url, data, function(response) {
$('div#form-page-main').html(response);
$('html, body').animate({ //scroll smoothly to form
scrollTop: $('div#form-page-main').offset().top - config.scrollDistanceFromTop
}, config.timeAnimateToAjaxForm);
});

});$(row).find('td.delete-control').
attr('data-source', '{{table.form.full_action_url}}?get_delete_form').
click(function () {
console.log('! show delete form above table: '+record_id);
var url = $(this).attr('data-source');
var data = {
'choose_record': [record_id]
};

TASK.Ajax.Post(url, data, function(response) {
$('div#form-page-main').html(response);
$('html, body').animate({ //scroll smoothly to confirmation
scrollTop: $('div#form-page-main').offset().top - config.scrollDistanceFromTop
}, config.timeAnimateToAjaxForm);
});

});

{% endif %}{% if table.form.rendered_in == 'modal' %}
// rendered in modal window

$(row).find('td.edit-control').
attr('data-source', '{{table.form.full_action_url}}?get_form').
attr('data-target', '#largeModal').
attr('data-toggle', 'modal').
click(function () {
console.log('! show edit form in modal: '+record_id);
var url = $(this).attr('data-source');
var data = {
'choose_record': [record_id]
};

TASK.Ajax.Post(url, data, function(response) {
$('div#largeModal').find('div.modal-body').html(response);
});

});$(row).find('td.delete-control').
attr('data-source', '{{table.form.full_action_url}}?get_delete_form').
attr('data-target', '#smallModal').
attr('data-toggle', 'modal').
click(function () {
console.log('! show delete form in modal: '+record_id);
var url = $(this).attr('data-source');
var data = {
'choose_record': [record_id]
};

TASK.Ajax.Post(url, data, function(response) {
$('div#smallModal').find('div.modal-body').html(response);
});

});

{% endif %}

Я использую Phalcon 1.3.3 TS на Windows (x86, PHP 5.4.19)

Любые предложения очень ценятся! Спасибо!

1

Решение

Вы можете запустить php внутри вольт и делать те вещи, которые вольт не обеспечивает.

я верю в будущее у нас будет

{% literal %} {% endliteral %}
or
{% verbatim %} {% endverbatim %}

в github уже есть NFR: https://github.com/phalcon/cphalcon/issues/1253

Теперь я не могу найти какой-либо выход, просто использовать чистый PHP в этой части, как:

...
<?php
// your code like it would be simple *.php file
?>
...
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]