Проблема с AJAX'ом Instant CMS 2

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО
#16 11 декабря 2015 в 15:30
Странник Вы сейчас начинаете холивар. Зачем? Вы сочли мы слова лично — обиделись, разозлились или какие там у Вас эмоции?
Отлично, забейте, пройдите мимо. Зачем Вы заходите и льете воду? Не тратьте свое время и мое.

Мои слова про демагогию Val воспринял адекватно. И продолжил обсуждение, что показывает адекватность и здравомыслие данного человека.
Если слово "демагог" зацепило Вас, то видимо в Вашем случае я попал в точку (видимо на рану соль насыпал).

Представьте, не должен. Никто.

Странник
Разве хотя бы в 1 моем сообщении было упоминание, что мне кто-то что-то должен? Опять у Вас эмоции. А на аватарке вроде взрослый серьезный мужик…
#17 11 декабря 2015 в 23:01

Про current_url даже не подумал, что вызовет вопрос.

Антон
current_url — как раз не вызывает вопросов, а вот +" #content_ajax" — вызывает.

Есть необходимость смены категории нажатием на 1 кнопку (категория — это статус записи).

Антон
"категория — это статус записи" — взрыв мозга)))

На странице выводится селект со списком категорий и кнопка "изменить".
Это реализовано аяксом, идет пост к php-файлу, который меняет категорию записи.

Антон
Меняете категорию записи? Это model->updateCategory($ctype_name, $id, $category); ?

Теперь пользователю нужно обновить информацию на странице без всяких перезагрузок страницы.
Применение и обработка информации, полученной при работе предыдущего запроса не подходит, т.к. меняется при смене категории многое — от хлебных крошек и содержимого записи до информации в сайдбаре.
В итоге мне нужно тупо обновить страницу уже имеющуся, но без морганий, свойственных перезагрузке страницы.

Антон
Так и делайте аякс запрос на эту страницу?! Вернется страница, далее разбираете ее по якорям и вставляете нужную часть куда вам надо.

P.S. и зря вы на Странник'а наезжаете — это вас совершенно не красит, тем более учитывая что он вам несколько раз указал куда надо смотреть.
#18 11 декабря 2015 в 23:59
Антон, мне кажется вы городите горбатого к стене) не поймите превратно. Я вам дал решение как получить всю страницу при ajax запросе. И да, разумеется подгрузится все, что вы запросили, т.е. страница целиком. Не нужны скрипты? распарсивайте ответ и вырезайте их перед вставкой. Никакого другого элегантного решения нет.
#19 12 декабря 2015 в 00:23
Fuze, извините, что ссу в ваш праздничный пунш, но разве технология аякс не разработана для того, что бы наоборот снижать нагрузку на базу? вы предлагаете загружать всю страницу потом ее распарсивать, зачем вообще тогда аякс нужен ?😊для красоты? =)
#20 12 декабря 2015 в 00:33

вы предлагаете загружать всю страницу потом ее распарсивать, зачем вообще тогда аякс нужен? для красоты? =)

oruchimaru
Прежде чем… куда-то стоит разобраться в сути проблемы, которую тут решают.

Топик стартеру по факту можно использовать реализацию full-ajax, единственный момент правильно настроить заголовки, чтобы не попасть на обработку ядром ajax запроса, ну и второй вариант все же сделать нормальный вывод в шаблоне, данных, который отдаст только тот контент который нужен для ответа.
#21 12 декабря 2015 в 00:41
Приятно видеть старых друзей =)
ТС, я думаю вообще нужно пересмотреть использование этой технологии… =(
#22 12 декабря 2015 в 06:17
вчера решил для себя аналогичную задачу (заменить элемент страницы данными, полученными через ajax. Решение, может быть и не изящное, но рабочее и потребовало минимума правок (1 js, который при желании прям в шаблон выносим) и правка самой страницы шаблона.
Выглядит примерно так. На странице куска шаблона изначально делаем проверку
  1. <?php if(isset($_POST['showcontacts'])) { ?>
  2. что вернём при обработке запроса
  3. <?php } else { ?>
  4. всё содержимое шаблона
  5.  
ну и js
  1.  
  2. $('.js-showcontacts').on('click',function() {
  3. var parent = $(this).closest('.hidden-contacts');
  4. $.ajax({
  5. type : 'POST',
  6. data : "showcontacts=true",
  7. url : document.location.href,
  8. success : function(html) {
  9. parent.html(html);
  10. }
  11. });
  12. return false;
  13. });
  14.  
Конечно, можно взять из запроса конкретно определённые данные и переменные, но мне надо было заменить целый кусок кода и то, что я написал вроде как работает. Клик на элемент .js-showcontacts отправляет post на текущую страницу с доп ключом, который в самом начале этой страницы проверяется и выдаёт нужный результат :)
#23 12 декабря 2015 в 07:40
Ну или как-то так отдать обратно переменные в json.
Вставляем код в шаблон с проверкой. Конечно, красивее всё это вынести в отдельный файл, но как дизайнеру-верстальщику-интегратору всего этого дела в cms — такой вариант меня устраивает.
  1.  
  2. <?php if(isset($_POST['showcontacts'])) { ?>
  3. <?php
  4. $data = array(
  5. 'phone' => htmlspecialchars($seller['sell_phone']),
  6. 'email' => '<a href="mailto:'.htmlspecialchars($seller['sell_email']).'">'.htmlspecialchars($seller['sell_email']).'</a>'
  7. );
  8. return cmsTemplate::getInstance()->renderJSON($data);
  9. ?>
  10.  
и заменить что надо и где надо

  1.  
  2. $.ajax({
  3. type : 'POST',
  4. dataType : "json",
  5. data : "showcontacts=true",
  6. url : document.location.href,
  7. success : function(data) {
  8. ${'.myclass').html(data.phone) // замена содержимого элемента с классом .myclass на полученные данные phone.
  9. }
  10. });
  11.  
(палками не кидать, я только встаю на тернистый путь глубокого изучения php и всего, что может потребоваться для работы с ним)
#24 12 декабря 2015 в 13:46

Fuze, извините, что ссу в ваш праздничный пунш, но разве технология аякс не разработана для того, что бы наоборот снижать нагрузку на базу? вы предлагаете загружать всю страницу потом ее распарсивать, зачем вообще тогда аякс нужен? для красоты? =)

oruchimaru
Не извиняю. Топик стартер желает по аякс получить страницу целиком. По существу вопроса ему предложены решения.
И да, технология аякс предназначена не для снижения нагрузки на базу.
#25 12 декабря 2015 в 14:14
По поводу моих наездов — прошу прощения, кого зацепил. Но про работу и предназначение технологий я в курсе. И мне не понравилось тыкание носом меня в матчасть, не разобравшись в проблеме.
Про то, что аякс-подгрузку в идеале надо использовать для получения конкретных данных, я в курсе.
То, что мне нужно реализовать получение всей страницы, поняли только Fuze и maxisoft, и при этом они не пытались меня "научить теории". Причем активные тыкатели в теорию оказывается не так и хорошо ее знают… (давайте только без слез и истерик)

а вот +" #content_ajax" — вызывает.

Val
Данный момент меня достаточно удивил при Вашей осведомленности в теории.
api.jquery.com/load/ Читаем блок "Loading Page Fragments"

Так и делайте аякс запрос на эту страницу?! Вернется страница, далее разбираете ее по якорям и вставляете нужную часть куда вам надо.

Val
Вы видимо не прочитали мое начальное сообщение в данном топике. Повторяю: движок не отдает при аяксе всю страницу.

P.S. и зря вы на Странник'а наезжаете — это вас совершенно не красит, тем более учитывая что он вам несколько раз указал куда надо смотреть.

Val
Странник, не разобравшись в ситуации, начал выказывать эмоции. Я не считаю, что его это красит. В сообществе профессионалов эмоции нужно держать при себе.

вчера решил для себя аналогичную задачу

iasphix
Спасибо за участие. Но именно с обработкой СВОЕГО php-файла и использованием результата проблем нет. Я не могу тупо релоадить всю страницу аяксом.

Топик стартер желает по аякс получить страницу целиком. По существу вопроса ему предложены решения.

Fuze
Наконец-то меня услышали danceЯ понял, что что-то подкрутить в движке проблематично, по крайней решения предложено не было. По поводу разных вариантов с аяксом понял. Всем спасибо.
#26 12 декабря 2015 в 14:40

Я понял, что что-то подкрутить в движке проблематично

Антон
да нет. можно например при аякс запросе не выводить "голову страницы". т.е. достаточно в хидере отдавать какой то еще заголовок (массив заголовков вместе с обнулением X-Requested-With) и этот заголовок потом проверять в методе head класса шаблонизатора.
Вообще в идеале (планирую потом сделать) при определенном хидере (например фулаякс) отдавать json данных:
то, что отработал контроллер;
массив виджетов;
массив скриптов и стилей;
заголовок страницы
И расставлять это все в шаблоне. Т.е. при таком подходе в том числе и ваша проблема решится. Хотя честно сказать проблемы так и не понял, вернее не считаю это проблемой, но раз так надо, значит надо.
#27 12 декабря 2015 в 19:06

при определенном хидере (например фулаякс) отдавать json данных:

Fuze
О это вообще полезная вещь будет.

Хотя честно сказать проблемы так и не понял, вернее не считаю это проблемой

Fuze
Дело в том что я впервые сталкиваюсь, чтобы движок что-то резал при аякс-запросе. И поэтому мне данный момент создал неудобства. Но не считаю это проблемой, проблема была бы, если вообще нельзя было аякс использовать laugh

Ладно всем спасибо, тему закрываю.

Попробую данное решение:

да нет. можно например при аякс запросе не выводить "голову страницы". т.е. достаточно в хидере отдавать какой то еще заголовок (массив заголовков вместе с обнулением X-Requested-With) и этот заголовок потом проверять в методе head класса шаблонизатора.

Fuze
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.