Загрузка страниц с Ajax!

Добавлено:
12 июл 2013, 14:10
sergio11ofpp
Пробую сдлеать при клике загрузку страницы с Ajax. Только вот не знаю в каком направление идти!
Мои предположения это создать в папке tool файл который будет тянуть
- Код: Выделить всё
<?php
$a = new Area('(в зависимости от клика)');
$a->display($c);
?>
То есть если мы кликаем на ссылку О нас
Он передаёт какой нить аттрибут типо "about"
Обрабатываем
- Код: Выделить всё
<?php
$a = new Area('about');
$a->display($c);
?>
И получаем обратно всю арею.
Только вот таким образом для каждой страницы придётся делать свой pagetype
Если у кого есть какие сображения по этому поводу буду презнателен!
Или просто я не так думаю и надо в другом направлении двигатся!
Re: Загрузка страниц с Ajax!

Добавлено:
12 июл 2013, 14:30
guyasyou
Я так понимаю, грузить страницу с того же сайта на С5?
Может быть так:
при клике, ажакс идет на нужную страницу, и возвращает все его содержимое, а вы в js фильтруете ответ, чтобы отковырять лишь нужный вам html (не всю же страницу загружать, со всеми там header и т.п.).
а потом вывести этот html в нужном месте.
про то как фильтровать- я не знаю, но есть такое.
Re: Загрузка страниц с Ajax!

Добавлено:
12 июл 2013, 15:41
cmsservice
Тут есть несколько уточняющих вопроса:
- Вам нужно всю страницу забирать или какие-то конкретные области?
- На каком уровне Вы владеете PHP и JS?
Re: Загрузка страниц с Ajax!

Добавлено:
13 июл 2013, 00:05
vbnm
очень нужная вещь в последнее время
очень хотца помотреть решение, если таковое будет найдено.
фильтры можно решить за счет модуля блок грабер, он на пхпквери, по сущетсву это парсинг
но белее качественно мне кажется использование XSL
и
Re: Загрузка страниц с Ajax!

Добавлено:
13 июл 2013, 12:26
Count_Raven
Нет, изначально неверный подход.
1. Идя в вашем направлении, вы убиваете возможность поисковикам индексировать ваш сайт. Поисковик по JavaScript-событиям шариться не будет.
2. Где-то на просторах интернета пару лет назад валялся простенький пример.
3. Что вам нужно (приблизительно):
- Все страницы являются обычными страницами, чтобы поисковые системы или пользователи с отключенным JavaScript нормально совершали навигацию по сайту.
- Ссылки в навигации являются обычными ссылками, ничего тут не меняем. Только добавляем к ним событие JavaScript onclick в котором отправляем AJAX-запрос к специальному tool (нам его надо написать), а в AJAX-запросе передаем href этой ссылки.
- Tool получает href ссылки, парсит его и получает объект страницы, которую нужно загрузить:
$page = Page::getByPath("/тут/будет/переменная/содержащая/путь/к/странице/из ссылки");
Получаем и отображаем area:
$a = new Area('Main');
$a->disableControls();
$a->display($page);
Area Main отправляется ответом AJAX и там у ссылки наш обработчик определяет место, где на странице этот контент должен отобразиться.
Можно также грузить не только Main, но и множество других Area, но тогда ответ нужно отдавать в JSON.
Еще можно сделать специальные атрибуты для страниц, в которых задавать параметры, что грузится через AJAX, а что нет или может быть для некоторых страниц нужно запретить загрузку через AJAX, к примеру, там будут сложные блоки, которые нельзя через AJAX, так как они добавляют в head контент, загружают еще какие-то скрипты, что-то инициализируют и не могут быть загружены через AJAX. И такие ссылки автоматически будут грузиться без AJAX.
Можно много чего прикрепить.
Ничего сложного в этом в принципе нет. Довольно элементарно.
P.S. Описанный пример я не тестировал, а сочинил прямо тут на форуме. Возможно в tool понадобится загрузить модели, может вам понадобится подключить какие-нибудь хелперы. Loader::model('collection'); Loader::model('page'); Loader::model('area'); ну и типа того. Надо на практике смотреть как будет.
Re: Загрузка страниц с Ajax!

Добавлено:
13 июл 2013, 12:37
Count_Raven
Не совсем то, но там есть мысли:
Re: Загрузка страниц с Ajax!

Добавлено:
19 июл 2013, 10:52
sergio11ofpp
Спасибо всё понял. ПРосто обычно я создовал атрибут для страницы типо Rich Text Где юзер мог писать весь контент и лоодел его, а тут хочется что веь сайт был Аджакс.
Спасибо.
Re: Загрузка страниц с Ajax!

Добавлено:
19 июл 2013, 17:06
Count_Raven
sergio11ofpp писал(а):Спасибо всё понял. ПРосто обычно я создовал атрибут для страницы типо Rich Text Где юзер мог писать весь контент и лоодел его, а тут хочется что веь сайт был Аджакс.
Спасибо.
Это не Concrete5-style. Выше я описал способ, как сделать весь сайт на AJAX без особых извращений.
Re: Загрузка страниц с Ajax!

Добавлено:
24 июл 2013, 11:45
sergio11ofpp
И ещё один вопросик. тоже про Ajax:
У меня в PHP:
- Код: Выделить всё
$path = ($_POST['path']);
$page = Page::getByPath($path);
$id = $page->getCollectionID();
Loader::model('page_list');
$pl = new PageList();
$pl->filterByParentID($id);
$results = $pl->getPage();
echo json_encode($results);
В JS
- Код: Выделить всё
success : function(data) {
alert(data.cID);
}
Но я получаю "undefined"/
Я так понимаю это из-за того что я получаю Объект многих страниц а не 1 массив?
И как это можно исправить например мне нужно получить имена и url саб страниц.
Re: Загрузка страниц с Ajax!

Добавлено:
24 июл 2013, 12:14
sergio11ofpp
Всё понял:
- Код: Выделить всё
$results = $pl->getPage();
$ret = array();
foreach ($results as $page) {
$ret[] = array('cID'=>$page->getCollectionID(), 'name'=>$page->getCollectionName());
}
echo json_encode($ret);
Всё получается только надо сделать loop в JS
Re: Загрузка страниц с Ajax!

Добавлено:
24 июл 2013, 12:23
Count_Raven
Угу.
Вы из pageList при помощи getPage получаете массив объектов Collection.
Re: Загрузка страниц с Ajax!

Добавлено:
14 авг 2013, 11:09
sergio11ofpp
Count_Raven писал(а):Нет, изначально неверный подход.
1. Идя в вашем направлении, вы убиваете возможность поисковикам индексировать ваш сайт. Поисковик по JavaScript-событиям шариться не будет.
2. Где-то на просторах интернета пару лет назад валялся простенький пример.
3. Что вам нужно (приблизительно):
- Все страницы являются обычными страницами, чтобы поисковые системы или пользователи с отключенным JavaScript нормально совершали навигацию по сайту.
- Ссылки в навигации являются обычными ссылками, ничего тут не меняем. Только добавляем к ним событие JavaScript onclick в котором отправляем AJAX-запрос к специальному tool (нам его надо написать), а в AJAX-запросе передаем href этой ссылки.
- Tool получает href ссылки, парсит его и получает объект страницы, которую нужно загрузить:
$page = Page::getByPath("/тут/будет/переменная/содержащая/путь/к/странице/из ссылки");
Получаем и отображаем area:
$a = new Area('Main');
$a->disableControls();
$a->display($page);
Area Main отправляется ответом AJAX и там у ссылки наш обработчик определяет место, где на странице этот контент должен отобразиться.
Можно также грузить не только Main, но и множество других Area, но тогда ответ нужно отдавать в JSON.
Еще можно сделать специальные атрибуты для страниц, в которых задавать параметры, что грузится через AJAX, а что нет или может быть для некоторых страниц нужно запретить загрузку через AJAX, к примеру, там будут сложные блоки, которые нельзя через AJAX, так как они добавляют в head контент, загружают еще какие-то скрипты, что-то инициализируют и не могут быть загружены через AJAX. И такие ссылки автоматически будут грузиться без AJAX.
Можно много чего прикрепить.
Ничего сложного в этом в принципе нет. Довольно элементарно.
P.S. Описанный пример я не тестировал, а сочинил прямо тут на форуме. Возможно в tool понадобится загрузить модели, может вам понадобится подключить какие-нибудь хелперы. Loader::model('collection'); Loader::model('page'); Loader::model('area'); ну и типа того. Надо на практике смотреть как будет.
В общем вчера попробывал этот способо не работает(((
Re: Загрузка страниц с Ajax!

Добавлено:
16 авг 2013, 12:19
Count_Raven
Странно, у меня работает практически идентичный способ.
А что у вас там не работает? Какая-то ошибка или еще какая проблема?
Re: Загрузка страниц с Ajax!

Добавлено:
20 авг 2013, 00:31
vbnm
sergio11ofppплиз, запакуй в архив все наработки и выложи, хотца добить эту тему, иль пойти другим путем.

Re: Загрузка страниц с Ajax!

Добавлено:
21 авг 2013, 11:50
sergio11ofpp
не то что доработка я пробывал так.
- Код: Выделить всё
var path = $(this).attr('href');
dataString = 'path='+path;
$.ajax({
опции;
data:dataString,
type:json,
success:function(response){
$('body').html(response);
}
});
В PHP
- Код: Выделить всё
<?php defined('C5_EXECUTE') or die("Access Denied.");
$path = ($_POST['path']);
$page = Page::getByPath($path);
$a = new Area('Main');
$ret = $a->display($page);
echo json encode($ret);
Выдаёт Ошибку типо $page не являяется объектом
Хотя если я сделаю
- Код: Выделить всё
rcho json encode($page);
То могу посмотреть cID, cName и так далее...