Писать на форуме DIAFAN.CMS могут только зарегистрированные пользователи. Войдите или зарегистрируйтесь.
Вызов шаблонного тега при использовании AJAX
-
- Степан (idxdoc)
- 334
-
25 ноября 2016 г.
-
Добрый день!
Создал новый файл с функцией, в котором содержится шаблонный тег вызова похожих товаров.
При обращение к файлу через шаблон все выводится, но если я обращаюсь к файлу с файла JS посредством AJAX, то ничего не выводится.
И заметил сл. при обращении к файлу через JS, в нем функции перестают работать, конкретно у меня не выводился результат запроса в базу, пришлось писать запрос без помощи внутренних функций диафана с новым подключением в базу и все заработало.
Надеюсь суть вопроса ясна.
Спасибо. -
-
-
-
26 ноября 2016 г.
-
Степан (idxdoc), не совсем понял Ваш вопрос, но попытаюсь ответить.Это здорово.ЦитатаСоздал новый файл с функцией, в котором содержится шаблонный тег вызова похожих товаров.Это подтверждает, что все здорово.ЦитатаПри обращение к файлу через шаблон все выводитсяЭто не здорово, попробуем разобраться, как говориться, в слепую.Цитатано если я обращаюсь к файлу с файла JS посредством AJAX, то ничего не выводитсяЭто говорит только об одном - в скрипте ОШИБКА. Особенность javascript в том, что если возникает ошибка, подключенный скрипт становиться не рабочим. Решение: открываем консоль браузера и смотрим, где ошибка. Далее исправляем ее.ЦитатаИ заметил сл. при обращении к файлу через JS, в нем функции перестают работатьНу так и понятно, скрипт стопорнулся и до записи в базу данных не дошло.Цитатаконкретно у меня не выводился результат запроса в базуЗдесь на форуме часто употребляют слово "грабли". Я пытался выяснить, что эти люди подразумевают. С их слов, этим словом можно назвать практически любую доработку алгоритма. Так вот, лично я считаю, что именно Ваше решение можно назвать "граблями". Поясню. Если Вы пишите код на основе чего-либо, то Ваш код должен максимально соответствовать этой основе. Ну да ладно, как говорит электрик: "Если что-то работает, то не надо в это что-то лезть". Так что если считаете, что задача решена - значит все здорово.Цитатапришлось писать запрос без помощи внутренних функций диафана с новым подключением в базу и все заработало
Успехов. -
-
-
-
- Степан (idxdoc)
- 334
-
26 ноября 2016 г. , редакция: 26 ноября 2016 г.
-
Ну Вы жгете конечно))))
ЦитатаИ заметил сл. при обращении к файлу через JS, в нем функции перестают работать
Это говорит только об одном - в скрипте ОШИБКА. Особенность javascript в том, что если возникает ошибка, подключенный скрипт становиться не рабочим. Решение: открываем консоль браузера и смотрим, где ошибка. Далее исправляем ее.
Перестают работать внутренние функции диафана, поэтому и пришлось делать через грабли))
Цитатапришлось писать запрос без помощи внутренних функций диафана с новым подключением в базу и все заработало
Здесь на форуме часто употребляют слово "грабли". Я пытался выяснить, что эти люди подразумевают. С их слов, этим словом можно назвать практически любую доработку алгоритма. Так вот, лично я считаю, что именно Ваше решение можно назвать "граблями". Поясню. Если Вы пишите код на основе чего-либо, то Ваш код должен максимально соответствовать этой основе. Ну да ладно, как говорит электрик: "Если что-то работает, то не надо в это что-то лезть". Так что если считаете, что задача решена - значит все здорово.
Успехов.
Это я привел другой пример, там задача решена, но в новой задаче я не могу просто взять и составить новый запрос, ибо если запрос в той задаче на вывод имени и фотографии, то тут этим не закончится, и это уже будут не грабли, а грабли в кубе.
Поясню еще раз.
Допустим возьмем шаблонный тег <insert name="show_block" module="shop"> и вызовем его в файле темы.
В итоге у нас выведутся товары.
А теперь возьмем этот шаблонный тег и вставим его в файл, который будет вызываться JS (AJAX), ничего не выведится.
Но если написать в этом файле "echo 'Тест';" то код сработает и выведится "Тест" -
-
-
-
26 ноября 2016 г.
-
Самое удивительное то, что я разбираюсь в том, что говорю.ЦитатаНу Вы жгете конечно))))ЦитатаДопустим возьмем шаблонный тег <insert name="show_block" module="shop"> и вызовем его в файле темы.
В итоге у нас выведутся товары.
А теперь возьмем этот шаблонный тег и вставим его в файл, который будет вызываться JS (AJAX), ничего не выведится.
Но если написать в этом файле "echo 'Тест';" то код сработает и выведится "Тест"
А вот, Вы, Степан (idxdoc), скорее нет, чем да. С чего вы взяли, что просто вставив тегв какой-то файл, с которым будет работать AJAX, то он сработает? ))) Чтобы он сработал, надо еще кое-что сделать. Уверен, Вы догадаетесь, что необходимо сделать, чтобы служебный тег заработал.Код<insert name="show_block" module="shop">
Успехов. -
-
-
-
- Степан (idxdoc)
- 334
-
26 ноября 2016 г.
-
Цитатанадо еще кое-что сделать
Вот за этим я сюда и обратился, подскажите мне пожалуйста, что нужно сделать чтобы служебный тег работал при вызове файла через AJAX? -
-
-
-
26 ноября 2016 г.
-
Цитатачто нужно сделать чтобы служебный тег работал при вызове файла через AJAX?
Да ответ на поверхности: нужно сделать ровно то, что заставляет его работать в cms. Сегодня у меня просто нет ни времени, ни желания вкладывать бесплатно код - решение. Тем более, что Вы и сами способны разобраться. -
-
-
-
- Степан (idxdoc)
- 334
-
27 ноября 2016 г.
-
Цитатабесплатно код
Можно и не бесплатно, без проблем -
-
-
-
-
27 ноября 2016 г. , редакция: 27 ноября 2016 г.
-
Степан, вы шаблонный тег через htmleditor() вызываете?
-
-
-
-
- Степан (idxdoc)
- 334
-
27 ноября 2016 г. , редакция: 27 ноября 2016 г.
-
По всякому пробовалКод
echo $this->diafan->_tpl->htmleditor('<insert name="show_block_rel" module="shop" count="4" images="1" shop_id="347">');
Кодecho $this->diafan->_tpl->htmleditor('<insert name="show_block_rel" module="shop" count="4" images="1" shop_id="'.$id.'">');
и оба варианта без diafan->_tpl-> также попробовал
Атрибута shop_id не должно быть, но в моем случае я его реализовал. -
-
-
-
-
27 ноября 2016 г.
-
вызывать нужно не файл, а метод класса (action).
в документации, насколько помню есть информация как работать с ajax. -
-
-
-
- Степан (idxdoc)
- 334
-
27 ноября 2016 г. , редакция: 27 ноября 2016 г.
-
Спасибо, попробую тогда разобраться)
О результатах отпишу, или выложу сюда мануал.
______________________________________________
Попробовал, в итоге ничего.
Консоль пишет что diafan_ajax.init не существует, оно и логично вроде, я же не создал эту функцию, создал ее только в shop.action, все сделал по примеру.
Кто знает как вызвать шаблонный тег посредством AJAX, отзовитесь, готов заплатить!!! -
-
-
-
27 ноября 2016 г.
-
1. пишете новый метод в shop.action, например get_data, внутри получаете нужные данные. тут как раз используйте либо htmleditor, либо напрямую код, вызываемый шаблонным тегом
2. в js вызываете, как-то такКод
$.ajax({
url: '/',
type: 'POST',
dataType: 'json',
module: 'shop',
action: 'get_data',
success: function (response) {
// тут ваши данные
}}
); -
-
-
-
- Степан (idxdoc)
- 334
-
27 ноября 2016 г. , редакция: 27 ноября 2016 г.
-
1 проблема в том что к файлу shop.action.php нельзя обратится в принципе пока есть данный код:Код
if (! defined('DIAFAN'))
{
$path = __FILE__; $i = 0;
while(! file_exists($path.'/includes/404.php'))
{
if($i == 10) exit; $i++;
$path = dirname($path);
}
include $path.'/includes/404.php';
}
Но это даже не есть проблема, т.к. его можно удалить, и доступ тут же будет.
Но удалив этот код я попробовал сделать, как Вы сказали, но ничего не вышло.
Подумал что я тупо не правильно пишу код, и решил вывести вначале файла просто echo 'test'; и открыв данный файл в браузере я конечно же увидел test, т.е. доступ к файлу у меня есть.
После вместо эхо тест вставил шаблонный тег в 2-х вариациях и он не сработал.
Затем я решил прочитать про action в jquery AJAX, но ничего не нашел, либо его там не может быть, либо я невнимательный, уж простите
Короче результат не о чем. -
-
-
-
28 ноября 2016 г. , редакция: 28 ноября 2016 г.
-
Цитатавызывать нужно не файл, а метод класса (action).
забудьте про файл shop.action после того ,как написали в него нужный вам код.
дальше роль играет уже сам диафан, именно его вы и просите обработать файл отправляя аякс в корень с параметрами module и action
---
и не надо удалять код в начале) -
-
-
-
- Степан (idxdoc)
- 334
-
28 ноября 2016 г.
-
Скажите пожалуйста, в url что нужно написать? если мы в action пишем shop
-
-
-
-
-
28 ноября 2016 г. , редакция: 28 ноября 2016 г.
-
Верно. В том виде, в котором ACTION в diafan.cms, такого там нет.ЦитатаЗатем я решил прочитать про action в jquery AJAX, но ничего не нашел, либо его там не может бытьНее, не задавайтесь. Вы почти решили свою задачу. Только не воспринимайте за издевку (если так выглядит, то заранее извиняюсь), просто иначе все будет слишком просто.ЦитатаКороче результат не о чем.Попробую помочь: Вы смотрите на куски кода, а надо видеть архитектуру кода в целом, тогда все получится.Цитаталибо я невнимательный
-
-
-
-
- Степан (idxdoc)
- 334
-
28 ноября 2016 г.
-
Да уже начинаю ее видеть, толку от этого 0
-
-
-
-
-
-
-
- Denis (Drachoon)
- 154
-
28 ноября 2016 г. , редакция: 28 ноября 2016 г.
-
Вообщем смотри есть модуль (например shop) есть контроллер (shop.php инициализация данных и принятие решений о том что требуется в данный момент) есть модель (я бы лучше называл это модулятор shop.model.php подготовка данных) отображение (вьюха shop.view.id.php рендер) это первый фундаментальный этап получения странички в котором надеюсь у вас нет пробелов понимании того как оно работает.
Ок. идём дальше на кой то хрен нам (вам понадобился AJAX) далее работает совершенно другая схема.
если у модуля имеется скрипт (смотрим в папку js) и он соответствует отображению (shop.id.js) он будет автоматически подключен (ну можно конечно и подключить любой другой скрипт в ручном режиме, ну как бы сейчас не об этом). Да к стати пример получился не очень удачный в этом js нет вызова AJAX, но можно добавить (то что накрапал Степан). Что произойдёт? Сформируется запрос который заставит Диафан отработать файл (shop.action.php) и если отталкиваться от примера Степана ( action: 'get_data' ) необходимо присутствие в нём метода get_data (public function buy(){}) и вот в нутри этого метода ты уже можешь делать все свои грязные дела, можешь даже HTML кусок того что должно быть выведено на странице написать. Подробности уже есть в доках
ПыСы: Сумбурно представляю о чём была речь выше какие-то файлы что то переписывалось. Надеюсь что то что было описано как-то поможет взглянуть на предмет обсуждения более правильно. Да кстати это всё работает точно также и для админской части только нужно смотреть относительно папки admin -
-
-
-
- Степан (idxdoc)
- 334
-
28 ноября 2016 г. , редакция: 28 ноября 2016 г.
-
Денис, большое спасибо за вышеизложенное, но к большому сожелению в доках о AJAX написано меньше всего и толком без примеров, тут кусочек там кусочек, я уже раз 10 перечитал, но так и не смог вникнуть.
Коднеобходимо присутствие в нём метода get_data (public function buy(){})
Я это понимаю и уже сделал, но он у меня даже тупо эхо тест не выводит, и ошибки в консоли не выводит, т.е. js работает исправно.
Скажите пожалуйста в url мне что нужно запихнуть? Файл shop.action.php или что-то другое? т.к. мы ведь в action: '...' указываем файл и так.
Но если я ничего не указываю в url, то соответственно ничего не происходит.
Я получается не могу связать ajax с методом описанным в shop.action.php, если Вы мне четкий пример хотябы укажите что написать в url,action и можно ли в diafan.ajax передать дату? я буду Вам признателен)
Цитатаидём дальше на кой то хрен нам (вам понадобился AJAX)
По нажатию на кнопку купить, у меня открывается немаленькое окошко, в котором либо акции выводятся, либо похожие товары если они есть, сразу выводить ко всем товарам их похожие товары не целесообразно.
Напишу сюда то что уже сделано:
В файл shop.action.php в конце класса добавил:Код/**
* Подгрузка похожих товаров
*
* @return void
*/
public function shop_load_rel()
{
echo 'test';
// Также пробовал писать $this->result["load"] = 'test';}
В файл js писал различные вариации AJAX, но все безуспешно.
В shop_load_rel() писал не только как указал, еще много различных вариаций пробовал, просто уже не помню. -
-
-
-
- Denis (Drachoon)
- 154
-
28 ноября 2016 г.
-
так echo и не даст ровным счётом ничего.
В документации ж написано написано данные отправляются обратно через конструкцию $this->result
и далее : бла бла бла $this->result["redirect"] ... $this->result["errors"] ... $this->result["data"]
например
$this->result["data"] = array(
".element" => "и вот тут твой кусок можно с HTML <strong>тегами</strong>");
Далее смотри уже в браузере пришло или нет. Если не пришло. Значит где-то косяк на сервере. Если пришло но не попало туда куда планировалось (а в данном случае <div class="element"></div>), то зачит что-то не так в клиентской части и необходимо смотреть в JS скрипт. -
-
-
-
- Denis (Drachoon)
- 154
-
28 ноября 2016 г.
-
Код
public function shop_load_rel() {
echo 'test'; // это не работает
// Также пробовал писать $this->result["load"] = 'test'; да но если хотите меньше ковыряться в JS то используйте тот набор который уже есть
$this->result["data"] = array('ожидаемая переменная'=> 'test');
}
а чтобы это отработало в клиентской части надо инициировать запросКод
$.ajax({
url:window.location.href,
type:'POST',
dataType:'json',
data:{
action:'shop_load_rel',
module: 'shop',
value1: 1,
value2: 2},
success:(function (response) {
if (response.data) {
// извращаемся с получеными данными как душе угодно
} else {
// или получаем ошибки и думаем почему так
$(".error_"+name, '.js_registration_form, .registration_form').text('').hide();
}
})
}); -
-
-
-
- Степан (idxdoc)
- 334
-
28 ноября 2016 г. , редакция: 28 ноября 2016 г.
-
Код
$('.wrap_filter_zagolovok').click(function(){
$.ajax({
url: window.location.href,
type: 'POST',
dataType: 'json',
data:{
action: 'shop_load_rel',
module: 'shop'
},success: function(response){
console.log(response.data); // или так
$('.wrap_filter_zagolovok').append(response.data); //или так
}
});
});
Кодpublic function shop_load_rel()
{
$this->result["data"] = array(
'.wrap_filter_zagolovok' => '<strong>тест</strong>'
);
}
Простите за нудство, но всеже что не так?
Ошибок никаких нет, и делал как у Вас с примером чтобы ошибку вывел, не выводит, он вообще ничего не выводит и при этом файл рабочий остается. -
-
-
-
28 ноября 2016 г.
-
Показывайте сайт уже что ли)
-
-
-
-
- Степан (idxdoc)
- 334
-
29 ноября 2016 г. , редакция: 29 ноября 2016 г.
-
Ссылка на категорию, где более менее что-то заполнено
http://www.stomatologicheskij-magazin.ru/shop/upakovochnye-mashiny/
Сайт не адаптирован еще, поэтому минимальное разрешение 1300 желательно -
-
-
-
-
- Denis (Drachoon)
- 154
-
29 ноября 2016 г.
-
так точка то зачем тут?
'.wrap_filter_zagolovok' => '<strong>тест</strong>'
в итоге wrap_filter_zagolovok это будет элемент массива.
оформляй правилльно, 'wrap_filter_zagolovok' => '<strong>тест</strong>' -
-
-
-
- Степан (idxdoc)
- 334
-
29 ноября 2016 г. , редакция: 29 ноября 2016 г.
-
Цитата".element" => "и вот тут твой кусок можно с HTML <strong>тегами</strong>");
Потому что у Вас тут точка :)
И не только у Вас, аналогично в других AJAX вызовов тоже точки либо решетка в зависимости что надо класс или id
Убрал точку, ровным счетом ничего. -
-
-
-
-
- Denis (Drachoon)
- 154
-
29 ноября 2016 г.
-
И ещё мне не очень нравится вот это
Кодsuccess: function(response){
console.log(response.data); // или так
$('.wrap_filter_zagolovok').append(response.data); //или так
}
посмотри как оно сделано в других модулях. -
-
-
-
- Степан (idxdoc)
- 334
-
29 ноября 2016 г.
-
Обращаюсь ко всем кто пытался мне помочь:
Если знаете как это все точно должно выглядеть, можете мне уделить 5 минут по скайпу чтобы все разжевать? я заплачу Вам! Тут не нужно писать хреново тучу кода, это не целый модуль и т.д. задействовано всего 2 файла и то в каждом по 2 строчки от силы. Уже 3 дня дрочим эту тему. Не понимаю я как это должно быть, и в документации не написано четко ни одного примера.
Или же если Вы не знаете хватит морочить голову.
Вы все по разному пишите ;D, кто нибудь делал эту хрень или нет?
Простите за грубость, если это так могло выглядеть. -
-
-
-
29 ноября 2016 г.
-
а на какое действие на вышеприведенном сайте аякс зовется?
-
-
-
-
- Степан (idxdoc)
- 334
-
29 ноября 2016 г.
-
Нажмите добавить в корзину, появится окошко, в котором справа будут акции, в них также есть кнопка купить, вот на ней и вызывается, это временно, для теста.
-
-
-
-
29 ноября 2016 г.
-
Кодvar id=$(this).parents('.shop-item').find('input[name="good_id"]').val();
$.ajax({
url:'http://www.stomatologicheskij-magazin.ru/custom/custom08_10_2016_14_24/themes/functions/show_cart_block_shop.php',
data:{shop_id:id},
success:function(result){
$('#wrap_cart_shop_list_infoThis').fadeOut(150,function(){$(this).html(result);});
$('#wrap_cart_shop_list_infoThis').fadeIn(150);
$('.cart_shop_list_title').fadeOut(150);
$('.cart_shop_list_title').fadeIn(150);}
});
вот этот код? -
-
-
-
- Denis (Drachoon)
- 154
-
30 ноября 2016 г.
-
Конечно делал и не раз. И всё работает как в админской части так и в пользовательской.
-
-
-
-
- Степан (idxdoc)
- 334
-
30 ноября 2016 г.
-
Ну в таком случае прошу вашей помощи, 5 минут уделить по скайпу сможете?
-
-
-
-
- Степан (idxdoc)
- 334
-
29 ноября 2016 г.
-
Нет, код сейчас закоментирован.
Этот код для обновления товара -
-
-
-
29 ноября 2016 г. , редакция: 29 ноября 2016 г.
-
Степан, создайте уже простой пример на демо-сборке CMS, сгенерируйте из него тему и выложите сюда архивом. Это одна из причин, по которой появились темы - показать наработку, применить, изменить, вернуть. Сразу будет понятно - какие файлы вы меняете, где и что.
Можно будет скачать, воткнуть в демо у себя, подправить код, чтобы работало и скинуть вам архив обратно рабочий. А так (как по мне) и дальше будете буквами обмениваться. -
-
-
-
- Степан (idxdoc)
- 334
-
29 ноября 2016 г.
-
Хорошо, дома обязательно сделаю.
-
-
-
-
-
-
-
-
- Степан (idxdoc)
- 334
-
30 ноября 2016 г.
-
Я сделал
Правда почти)))
Я вывел то что мне нужно, единственное в формате json, мне нужно в формате html, но если я пишу dataType: 'html', то ничего не выводится..
Парни давайте добьем уже эту тему:) -
-
-
-
- Denis (Drachoon)
- 154
-
01 декабря 2016 г.
-
Я использую вот такую конструкцию. Для того чтобы полученая строка превратиласть в HTML.Код
function htmlDecode(input){
var e = document.createElement('div');
e.innerHTML = input;
return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue;
}
и использую там к чему клеитсяКод$("выбранный элемент").empty().append(htmlDecode(val));
-
-
-
-
- Степан (idxdoc)
- 334
-
01 декабря 2016 г.
-
Есть проще, с помощью prepare().
А так большое спасибо! -
-
-
-
-
-
- Степан (idxdoc)
- 334
-
01 декабря 2016 г. , редакция: 01 декабря 2016 г.
-
Ребята!
Я сделал!))))
Ключевой момент мне служба поддержки подсказала, но не важно)))
Короче, кому нужно будет тоже самое, обращайтесь, я выложу мануал, просто сейчас нет времени!) -
-
-
-
24 мая 2018 г.
-
Очень интересно если предложение в силе :)
-
-
-
-
- Степан (idxdoc)
- 334
-
24 мая 2018 г.
-
Полтора года прошло))) Я и не помню уже что тут делал, я так понимаю тема про ajax, ничего сложного в этом нет, но мануал мало чем поможет на самом деле, все индивидуально, скопировав тупо код - это не решение собственной задачи, в любом случае нужны будут правки.
-
-
-
-
24 мая 2018 г.
-
Используйте в шаблонном теге атрибут defer. Подробнее можно прочитать, например, здесь: https://www.diafan.ru/news/sborka-diafancms-6066-esche-bystree или в документации к cms: https://www.diafan.ru/dokument/
-
-
-
-
-
- Denis (Drachoon)
- 154
-
01 декабря 2016 г.
-
Красавчик, ведь всё не так сложно - правда? Держи (это 5 :-) если что)
-
-
Поблагодарили: Степан (idxdoc)
-
-
-
- Степан (idxdoc)
- 334
-
01 декабря 2016 г.
-
Спасибо :)
Да вообще ерунда)))
И тебе пятюлю -
-
-
-
-
18 января 2019 г.
-
Вот кстати нашел отличный материал по объекту XMLHttpRequest http://webdiz.com.ua/glava10-ajax/osnovy-obekta-xmlhttprequest/
-
-
-
-
18 января 2019 г.
-
Спамеры атакуют.
-
-
-
-
- Denis (Drachoon)
- 154
-
18 января 2019 г.
-
Молодец - пользуйся.
-
-
-
Новости
-
18 июня
-
В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
-
24 апреля
-
В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
-
12 января
-
После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке.
Блоги
-
24.04.2024
-
Выпустили новую сборку DIAFAN.CMS 7.1.4.
Блоги
-
12.01.2024
-
В данном руководстве познакомим вас с панелью управления DIAFAN.CMS