Вы не зашли.
vitaly, поставил ночную сборку, и плагины и движок, начал делать формы с нестандартным оформлением, сделал шаблоны, закинул в папку templates, выставил в настройках шаблоны для форм, и ноль эффекту, все равно берет из site.form.tpl, как быть?
Попробовал потом поставить версию 0.13, все тоже самое.
Прикладываю плагин и сами оформления, может я что-то сделал не так в самом оформлении кода.
Заранее спасибо!
I ♥ NGeneration CMS
Не в сети
Евгений, попробуй так, найти ~94 строка feedback.php
if ($frow['template'] && file_exists(root.'plugins/feedback/tpl/templates/'.$frow['template'])) {
заменить на
if ($frow['template'] && file_exists(root.'plugins/feedback/tpl/templates/'.$frow['template'].'.tpl')) {
Не в сети
Klim, sk!, честно сказать я затрудняюсь ответить почему это произошло, так как с плагином познакомился только сегодня, но был сделан ряд ошибок.
1. Забыт обработчик в feedback.php , поэтому JavaScript обработчик вообще никогда не появлялся
Найти
// Check if we need captcha if (substr($frow['flags'],1,1)) { $tVars['flags']['captcha'] = 1; $tVars['captcha_url'] = admin_url."/captcha.php?id=feedback"; $tVars['captcha_rand'] = rand(00000, 99999); $_SESSION['captcha.feedback'] = $tVars['captcha_rand']; }
ниже добавить
if(substr($frow['flags'],0,1)){ $tVars['flags']['jcheck'] = 1; }
этим мы вернем JavaScript код на странице
2. Сам обработчик из шаблона site.form.tpl неисправен + неверно вписаны языковые переменные
замените весь кусок
<script language="JavaScript"> var FBF_INIT = {{ FBF_DATA }}; function FBF_CHECK() { var frm = document.getElementById('feedback_form'); if (frm == null) return true; var i; for (i in FBF_INIT) { console.log(i); if (FBF_INIT[i][1]) { if (FBF_INIT[i][0] == 'date') { if ((frm[i+':day'].value == '1') && (frm[i+':month'].value == '1') && (frm[i+':year'].value == '1970')) { alert('{l_feedback:form.err.notfilled} ('+FBF_INIT[i][2]+')!'); frm[i+':day'].focus(); return false; } } else if (frm[i].value == '') { alert('{l_feedback:form.err.notfilled} ('+FBF_INIT[i][2]+')!'); frm[i].focus(); return false; } } } return true; } </script>
на
<script language="JavaScript"> var FBF_INIT = {{ FBF_DATA }}; function FBF_CHECK() { var frm = document.getElementById('feedback_form'); if (frm == null) return true; var i; for (i in FBF_INIT) { console.log(i); if (FBF_INIT[i][1]) { if (FBF_INIT[i][0] == 'date') { if ((frm['fld_' + i+':day'].value == '1') && (frm['fld_' +i+':month'].value == '1') && (frm['fld_' +i+':year'].value == '1970')) { alert('{{lang['feedback:form.err.notfilled']}} ('+FBF_INIT[i][2]+')!'); frm['fld_' +i+':day'].focus(); return false; } } else if (frm['fld_' +i].value == '') { alert('{{lang['feedback:form.err.notfilled']}} ('+FBF_INIT[i][2]+')!'); frm['fld_' +i].focus(); return false; } } } return true; } </script>
Ну нафиг такую автоматизацию, быстрее было сторонний скрипт прикрутить, чем возиться с универсальным решением
неплохо бы внести эти правки в ночную сборку плагина
кстати, даже с этими правками не работает проверка полей - не смотря на явно указанное обязательное заполнение в настройках, все-равно имеется возможность отправить пустую форму...
Изменено beliy (2012-08-13 13:34:58)
Не в сети
О, и еще вопрос по теме так сказать, а как добавить в скрипт еще проверку поля для цифр с каптчи? А то var FBF_INIT = {{ FBF_DATA }}; генерит лишь обычные поля, а вот поле <input type="text" name="vcode"/> не проверяется, только при перезагрузке страницы. Можно ли как-то добавить его тоже в проверку? Просто на заполнение, не обязательно на соответствие цифрам.
И еще один вопрос, при использовании своего оформления, как сделать так чтобы в ситуации при неправильно введенной каптче не терялся весь текст что был вбит в поля?
Заранее спасибо большое за любой ответ!
EDIT: попытался вставить value="{{ value }}" для инпутов, не помогло, просто пустой value="" выдает после перезагрузки страницы (перезагрузка-при неправильно введенной каптче).
EDIT2: в собственном оформлении не работает конструкция {% extends localPath(0) ~ "site.body.tpl" %}, сразу выдает ошибку:
NGCMS Runtime error: Class 'Twig_Error_Loader' not found
[ 1]: Class 'Twig_Error_Loader' not found
Stack trace
Line # File name
190 /home/httpd/vhosts/site.ru/httpdocs/engine/includes/classes/Twig/Loader/NGCMS.php
I ♥ NGeneration CMS
Не в сети
beliy, спасибо, исправил.
кстати, даже с этими правками не работает проверка полей - не смотря на явно указанное обязательное заполнение в настройках, все-равно имеется возможность отправить пустую форму...
А у меня проверка работает.
Естественно, поле должно быть отмечено как "обязательное".
Евгений, добавил проверку заполненности поля для капчи (не правильности, а просто заполненности).
Для своего оформления - копируешь site.form.tpl и работаешь с ним.
Обрати внимание на код:
{% for entry in entries %}
...
Все переменные хранятся в массиве entries, можно напрямую доставать данные (старые заполненные значения) оттуда.
Для удобства сначала сделай
{{ debugValue(entries) }}
и сразу всё станет понятно
EDIT2:
А что ты хотел добиться этой конструкцией?
Не в сети
NGCMS Runtime error: Call to undefined function twigLocalPath()
[ 1]: Call to undefined function twigLocalPath()Stack trace
Line # File name
11 C:\Program Files (x86)\VertrigoServ\www\engine\cache\twig\4c\a7\6404bbad04b1d14c00d55040904f.php
Engine: 1047 (SVN)
Plugin: v17 (SVN)
кто знает как исправить?
Изменено opoz (2012-08-18 01:10:25)
Не в сети
vitaly, default
нечего не изменял
Ошибка не только у меня http://ngcms.ru/forum/viewtopic.php?id=2577
Изменено opoz (2012-08-18 15:26:02)
Не в сети
vitaly, там у меня несколько форм с немного разнящимся оформлением, потому что там в одной форме одни блоки с одними заголовками, а в другой другие...сейчас приведу их примеры:
ФОРМА 1
{% block content %}
{% if (flags.jcheck) %}
<script type="text/javascript">
var FBF_INIT = {{ FBF_DATA }};
function FBF_CHECK() {
var frm = document.getElementById('feedback_form');
if (frm == null) return true;
var i;
for (i in FBF_INIT) {
if (FBF_INIT[i][1]) {
if (FBF_INIT[i][0] == 'date') {
if ((frm[i+':day'].value == '1') && (frm[i+':month'].value == '1') && (frm[i+':year'].value == '1970')) {
alert('Вы не заполнили '+FBF_INIT[i][2]+'!');
frm[i+':day'].focus();
return false;
}
} else if (frm[i].value == '') {
alert('Вы не заполнили "'+FBF_INIT[i][2]+'"!');
frm[i].focus();
return false;
}
}
}
return true;
}
</script>
{% endif %}
<form method="post" action="{{ form_url }}" id="feedback_form" name="feedback_form">
{{ hidden_fields }}
<input type="hidden" name="id" value="{{ id }}"/>
<span class="feedback">
<h1>Заявка на коммерческое предложение</h1>
{% if (flags.error) %}<div class="msge">{{ errorText }}</div>{% endif %}
<table>
<tr>
<td>
<div class="info">Укажите пожалуйста Ваши данные:</div>
<input type="text" name="fld_f1nameorg" placeholder="Название организации" value="{{ entry.value }}" class="feedback-input-nameorg"/>
<input type="text" name="fld_f1fio" placeholder="ФИО" value="{{ entry.value }}" class="feedback-input-fio"/>
</td>
</tr>
<tr>
<td>
<div class="phone">Ваши контактные данные:</div>
<input type="text" name="fld_f1phone" placeholder="Ваш телефон" value="{{ entry.value }}" class="feedback-input-phone"/>
<input type="text" name="fld_f1email" placeholder="Email" value="{{ entry.value }}" class="feedback-input-email"/>
</td>
</tr>
{% if (flags.captcha) %}
<script type="text/javascript">
var cajax = new sack();
function reload_captcha() {
var captc = document.getElementById('img_captcha');
if (captc != null) {
captc.src = "{{ captcha_url }}&rand={{ rand }}";
}
}
reload_captcha();
</script>
<tr>
<td>
<div class="captcha">Защита от автоматического заполнения:</div>
<input class="feedback-input-captcha" type="text" placeholder="Введите символы с картинки" name="vcode"/>
<span class="feedback-captcha-img"><img id="img_captcha" onclick="this.src='{{ captcha_url }}&rand='+Math.random();" src="{{ captcha_url }}&rand={{ rand }}" alt="captcha" /></span>
<span class="feedback-captcha-img-refresh"><img onclick="reload_captcha();" src="{tpl_url}/images/captcha-refresh.png" title="Обновить каптчу" /></span>
</td>
</tr>
{% endif %}
</table>
<div class="send-button">
<input type="submit" {% if (flags.jcheck) %}onclick="return FBF_CHECK();"{% endif %} class="submit-form" value="Отправить"/>
</div>
</span>
</form>
{% endblock %}
ФОРМА 2
{% block content %}
{% if (flags.jcheck) %}
<script type="text/javascript">
var FBF_INIT = {{ FBF_DATA }};
function FBF_CHECK() {
var frm = document.getElementById('feedback_form');
if (frm == null) return true;
var i;
for (i in FBF_INIT) {
if (FBF_INIT[i][1]) {
if (FBF_INIT[i][0] == 'date') {
if ((frm[i+':day'].value == '1') && (frm[i+':month'].value == '1') && (frm[i+':year'].value == '1970')) {
alert('Вы не заполнили '+FBF_INIT[i][2]+'!');
frm[i+':day'].focus();
return false;
}
} else if (frm[i].value == '') {
alert('Вы не заполнили "'+FBF_INIT[i][2]+'"!');
frm[i].focus();
return false;
}
}
}
return true;
}
</script>
{% endif %}
<form method="post" action="{{ form_url }}" id="feedback_form" name="feedback_form">
{{ hidden_fields }}
<input type="hidden" name="id" value="{{ id }}"/>
<span class="feedback">
<h1>Форма обратной связи</h1>
{% if (flags.error) %}<div class="msge">{{ errorText }}</div>{% endif %}
<table>
<tr>
<td>
<textarea type="text" name="fld_f2text">{{ entry.value }}</textarea>
</td>
</tr>
<tr>
<td>
<div class="info">Укажите пожалуйста Ваши данные:</div>
<input type="text" name="fld_f2nameorg" value="{{ entry.value }}" placeholder="Название организации" class="feedback-input-nameorg"/>
<input type="text" name="fld_f2fio" value="{{ entry.value }}" placeholder="ФИО" class="feedback-input-fio"/>
</td>
</tr>
<tr>
<td>
<div class="phone">Ваши контактные данные:</div>
<input type="text" name="fld_f2phone" value="{{ entry.value }}" placeholder="Ваш телефон" class="feedback-input-phone"/>
<input type="text" name="fld_f2email" value="{{ entry.value }}" placeholder="Email" class="feedback-input-email"/>
</td>
</tr>
{% if (flags.captcha) %}
<script type="text/javascript">
var cajax = new sack();
function reload_captcha() {
var captc = document.getElementById('img_captcha');
if (captc != null) {
captc.src = "{{ captcha_url }}&rand={{ rand }}";
}
}
reload_captcha();
</script>
<tr>
<td>
<div class="captcha">Защита от автоматического заполнения:</div>
<input class="feedback-input-captcha" type="text" placeholder="Введите символы с картинки" name="vcode"/>
<span class="feedback-captcha-img"><img id="img_captcha" onclick="this.src='{{ captcha_url }}&rand='+Math.random();" src="{{ captcha_url }}&rand={{ rand }}" alt="captcha" /></span>
<span class="feedback-captcha-img-refresh"><img onclick="reload_captcha();" src="{tpl_url}/images/captcha-refresh.png" title="Обновить каптчу" /></span>
</td>
</tr>
{% endif %}
</table>
<div class="send-button">
<input type="submit" {% if (flags.jcheck) %}onclick="return FBF_CHECK();"{% endif %} class="submit-form" value="Отправить"/>
</div>
</span>
</form>
{% endblock %}
ФОРМА 3
{% block content %}
{% if (flags.jcheck) %}
<script type="text/javascript">
var FBF_INIT = {{ FBF_DATA }};
function FBF_CHECK() {
var frm = document.getElementById('feedback_form');
if (frm == null) return true;
var i;
for (i in FBF_INIT) {
if (FBF_INIT[i][1]) {
if (FBF_INIT[i][0] == 'date') {
if ((frm[i+':day'].value == '1') && (frm[i+':month'].value == '1') && (frm[i+':year'].value == '1970')) {
alert('Вы не заполнили '+FBF_INIT[i][2]+'!');
frm[i+':day'].focus();
return false;
}
} else if (frm[i].value == '') {
alert('Вы не заполнили "'+FBF_INIT[i][2]+'"!');
frm[i].focus();
return false;
}
}
}
return true;
}
var cajax = new sack();
function reload_captcha() {
var captc = document.getElementById('img_captcha');
if (captc != null) {
captc.src = "{{ captcha_url }}&rand={{ rand }}";
}
}
reload_captcha();
</script>
{% endif %}
<form method="post" action="{{ form_url }}" id="feedback_form" name="feedback_form">
{{ hidden_fields }}
<input type="hidden" name="id" value="{{ id }}"/>
<span class="feedback">
<h1>Заявка на обследование</h1>
{% if (flags.error) %}<div class="msge">{{ errorText }}</div>{% endif %}
<table>
<tr>
<td>
<h3>Цель обследования</h3>
<select name="fld_choiceb1" class="styled">
<option value="Имеются проблемы с теплоснабжением" selected="selected">У нас имеются проблемы с теплоснабжением</option>
<option value="Энергосбережение и повышение энергетической эффективности объекта">Мы заинтересованы в энергосбережении и повышении энергетической эффективности своего объекта</option>
<option value="Получение коммерческого предложения">Мы хотим получить коммерческое предложение</option>
</select>
</td>
</tr>
<tr>
<td>
<h3>Виды системы</h3>
<select name="fld_choiceb2" class="styled">
<option value="Тепловой узел" selected="selected">Тепловой узел (узел учета, узел регулирования тепла, узел регулирования ГВС)</option>
<option value="Система внутреннего отопления">Система внутреннего отопления (отопительные радиаторы, внутридомовая и внутриквартирная разводка)</option>
<option value="Теплотрасса">Теплотрасса</option>
</select>
</td>
</tr>
<tr>
<td>
<textarea type="text" name="fld_f3text" value="">{{ entry.value }}</textarea>
</td>
</tr>
<tr>
<td>
<div class="info">Укажите пожалуйста Ваши данные:</div>
<input type="text" name="fld_f3nameorg" value="{{ entry.value }}" placeholder="Название организации" class="feedback-input-nameorg"/>
<input type="text" name="fld_f3fio" value="{{ entry.value }}" placeholder="ФИО" class="feedback-input-fio"/>
</td>
</tr>
<tr>
<td>
<div class="phone">Ваши контактные данные:</div>
<input type="text" name="fld_f3phone" value="{{ entry.value }}" placeholder="Ваш телефон" class="feedback-input-phone"/>
<input type="text" name="fld_f3email" value="{{ entry.value }}" placeholder="Email" class="feedback-input-email"/>
</td>
</tr>
{% if (flags.captcha) %}
<script type="text/javascript">
var cajax = new sack();
function reload_captcha() {
var captc = document.getElementById('img_captcha');
if (captc != null) {
captc.src = "{{ captcha_url }}&rand={{ rand }}";
}
}
reload_captcha();
</script>
<tr>
<td>
<div class="captcha">Защита от автоматического заполнения:</div>
<input class="feedback-input-captcha" type="text" placeholder="Введите символы с картинки" name="vcode"/>
<span class="feedback-captcha-img"><img id="img_captcha" onclick="this.src='{{ captcha_url }}&rand='+Math.random();" src="{{ captcha_url }}&rand={{ rand }}" alt="captcha" /></span>
<span class="feedback-captcha-img-refresh"><img onclick="reload_captcha();" src="{tpl_url}/images/captcha-refresh.png" title="Обновить каптчу" /></span>
</td>
</tr>
{% endif %}
</table>
<div class="send-button">
<input type="submit" {% if (flags.jcheck) %}onclick="return FBF_CHECK();"{% endif %} class="submit-form" value="Отправить"/>
</div>
</span>
</form>
{% endblock %}
Если же сделать с {% for entry in entries %}
{% for entry in entries %}
<table>
<tr>
<td>
<div class="info">Укажите пожалуйста Ваши данные:</div>
<input type="text" name="fld_f1nameorg" placeholder="Название организации" value="{{ entry.value }}" class="feedback-input-nameorg"/>
<input type="text" name="fld_f1fio" placeholder="ФИО" value="{{ entry.value }}" class="feedback-input-fio"/>
</td>
</tr>
<tr>
<td>
<div class="phone">Ваши контактные данные:</div>
<input type="text" name="fld_f1phone" placeholder="Ваш телефон" value="{{ entry.value }}" class="feedback-input-phone"/>
<input type="text" name="fld_f1email" placeholder="Email" value="{{ entry.value }}" class="feedback-input-email"/>
</td>
</tr>
{% endfor %}
то выходит следующее:
Кстати, не знаю почему, но скрипт обработки внешних линков работает через задницу...поэтому даю прямую ссылку на картинку без оборачивания в теги: http://photoload.ru/data/80/8b/20/808b20458f93f0741d1321265a48a081.png хммм...нет, это дело не в линках, по ходу хостинг photoload ломанули, там постоянно выводит на постер китайского фильмеца. Прикладываю скрин тогда к сообщению.
То есть происходит копирование всей формы столько раз - сколько есть полей для данной формы. Это явно не то что нужно. Либо может быть я не так понял, если да, то будь добр, объясни пожалуйста на пальцах.
А по поводу {% extends localPath(0) ~ "site.body.tpl" %}, то данный код используется в site.form.tpl для выведения из боди переменную {{ title }} и оформление формы общее, ну насколько я понимаю, но в отдельных шаблонах это не работает.
PS: так же если в {% if entry.type == 'text' %}{% endif %} то там таже фигня...
I ♥ NGeneration CMS
Не в сети
Виталий, плагин feedback работает в связке с дополнительными полями и баскетом, в последнем идет передача выбранного товара через обратную связь на e-mail продавца, а как быть с продублированным письмом самому заказчику. Причем желательно иметь разные формы для продавца и заказчика. Заказчик получает список товара который он выбрал, дату заказа, и генерируемый уникальный ID письма, можно сгенерировать из даты, типа 201208121242. Продавец получает все тоже самое плюс данные о заказчике - имя, почта и желательно IP адрес для бана любителей спамить через формы заказа. Или ты как-то по другому это планировал и я чего-то упустил.
Не в сети
vitaly, default
нечего не изменял
Ошибка не только у меня http://ngcms.ru/forum/viewtopic.php?id=2577
"Решил" вопрос следующ. извращением: удалил строку "LocalPath(0) ~" из файлов в каталоге tpl плагина, скопировал conf.navi.tpl и site.body.tpl в корн. каталог шаблона сайта.
Не в сети
0.9.3 + SVN [SVN1047+]
feedback[0.18]
такая ошибка при переходе в форму обратной связи с сайта
Stack trace
Line # File name
20 C:\Program Files (x86)\VertrigoServ\www\engine\cache\twig\94\a5\980f9e9b3f71eade08b07dd37dd8.php
getTemplateName(); return $context['_templatePath']; } // // Software generated fatal error function ngFatalError($title, $description = '') { ?>
NGCMS Software generated fatal error:
[ Software error ]:
Stack trace
Line # Function File name
ngShutdownHandler
такая ошибка при переходе в feedback в админке
NGCMS Runtime error: Call to undefined function twigLocalPath()
[ 1]: Call to undefined function twigLocalPath()
Stack trace
Line # File name
11 C:\Program Files (x86)\VertrigoServ\www\engine\cache\twig\4c\a7\6404bbad04b1d14c00d55040904f.php
жизнь бьёт ключом......,ну иногда и гайкой.....
Хаки и Скрипты| Бесплатные шаблоны NGCMS
На Районе - Шахтинск Украшение Windows
Не в сети
opoz пишет:vitaly, default
нечего не изменял
Ошибка не только у меня http://ngcms.ru/forum/viewtopic.php?id=2577"Решил" вопрос следующ. извращением: удалил строку "LocalPath(0) ~" из файлов в каталоге tpl плагина, скопировал conf.navi.tpl и site.body.tpl в корн. каталог шаблона сайта.
работает нормально?
у меня такая ошибка
Stack trace
Line # File name
20 C:\Program Files (x86)\VertrigoServ\www\engine\cache\twig\94\a5\980f9e9b3f71eade08b07dd37dd8.php
getTemplateName(); return $context['_templatePath']; } // // Software generated fatal error function ngFatalError($title, $description = '') { ?>
NGCMS Software generated fatal error:
[ Software error ]:
Stack trace
Line # Function File name
ngShutdownHandler
Изменено irbees2008 (2012-09-13 12:00:44)
жизнь бьёт ключом......,ну иногда и гайкой.....
Хаки и Скрипты| Бесплатные шаблоны NGCMS
На Районе - Шахтинск Украшение Windows
Не в сети
nevermind пишет:opoz пишет:vitaly, default
нечего не изменял
Ошибка не только у меня http://ngcms.ru/forum/viewtopic.php?id=2577"Решил" вопрос следующ. извращением: удалил строку "LocalPath(0) ~" из файлов в каталоге tpl плагина, скопировал conf.navi.tpl и site.body.tpl в корн. каталог шаблона сайта.
работает нормально?
у меня такая ошибка
Stack trace Line # File name 20 C:\Program Files (x86)\VertrigoServ\www\engine\cache\twig\94\a5\980f9e9b3f71eade08b07dd37dd8.php getTemplateName(); return $context['_templatePath']; } // // Software generated fatal error function ngFatalError($title, $description = '') { ?> NGCMS Software generated fatal error: [ Software error ]: Stack trace Line # Function File name ngShutdownHandler
Да, была такая ошибка, костыль работает.
Не в сети
так у меня ошибка после твоего костыля,в админке работает,а форма с сайта нет появляется эта ошибка
жизнь бьёт ключом......,ну иногда и гайкой.....
Хаки и Скрипты| Бесплатные шаблоны NGCMS
На Районе - Шахтинск Украшение Windows
Не в сети
так у меня ошибка после твоего костыля,в админке работает,а форма с сайта нет появляется эта ошибка
Значит ты не удалил в каком-то из шаблонов строку "LocalPath(0) ~", возможно как раз в тех(conf.navi.tpl или site.body.tpl ), которые скопировал в каталог шаблона своего сайта.
Не в сети
не работает
жизнь бьёт ключом......,ну иногда и гайкой.....
Хаки и Скрипты| Бесплатные шаблоны NGCMS
На Районе - Шахтинск Украшение Windows
Не в сети
Евгений, проблема исправлена в SVN 1046.
Knopik, именно так и исправлена, спасибо
То есть шаблоны в папке с шаблоном сайта хранить нельзя ? Только в plugins ? Не очень удобно.
Не в сети
Вообще не могу разобраться как свои шаблоны работают. Какой шаблон из /engine/plugins/feedback/tpl нужно склонировать в /engine/plugins/feedback/tpl/templates ?
Не в сети
Не в сети
Knopik, он там подключает {% extends localPath(0) ~ "site.body.tpl" %} тоже нужен ?
И какой выбирать тогда в настройках, который form или body ? Странно что в readme ничего нет.
// да, выбирать типа form
Не в сети