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

Любая помощь по установке/настройке/модификации concrete5

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

Сообщение vbnm » 21 авг 2013, 23:39 ,  »  Сообщение:#16

Count_Raven писал(а):$page = Page::getByPath("/тут/будет/переменная/содержащая/путь/к/странице/из ссылки");
Получаем и отображаем area:
$a = new Area('Main');
$a->disableControls();
$a->display($page);

Это работает, проверил.
Ед , что неясно, так это строка:
$a->disableControls();

для чего она? Без нее так же работает.
кстати, можно отображать и то, что находится не только в ('Main') по этому принципу, но и то что находится в сайд баре. Единственно, что не отображается, так это стеки пока.
Сейчас разбираюсь, как можно прикрутить типичную навигацию, если делать это на уровне модуля для страницы. Чтобы запрос на переход на опред страницу подгружал именно содержимое модуля.
vbnm
 
Сообщения: 462
Зарегистрирован: 02 июл 2011, 01:44

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

Сообщение vbnm » 22 авг 2013, 00:42 ,  »  Сообщение:#17

sergio11ofpp попробуй сделать банально, как это делается в С5
$page = Page::getByPath("/тут/будет/переменная/содержащая/путь/к/странице/из ссылки");


<?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);

у меня срабатывает так на встроенных в С5 JS:

Код: Выделить всё
<?php  defined('C5_EXECUTE') or die("Access Denied.");?>
  <?php 
$page = Page::getByPath("/about");
/* Получаем и отображаем area: */
$a = new Area('Main');
$a->disableControls();
 $a->display($page);
/* если нужно получить содержимое сайдбара, то дабавляем: */
 $as = new Area('Sidebar');
         $as->display($page);
?>

$page = Page::getByPath($path);- по-моему у тебя тут не определено. :?:
vbnm
 
Сообщения: 462
Зарегистрирован: 02 июл 2011, 01:44

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

Сообщение Count_Raven » 22 авг 2013, 06:46 ,  »  Сообщение:#18

vbnm писал(а):$a->disableControls();
для чего она? Без нее так же работает.

Отключает элементы управления в Edit Mode.

vbnm писал(а):кстати, можно отображать и то, что находится не только в ('Main') по этому принципу, но и то что находится в сайд баре.

Не важно где это находится. Можно отображать любую Area, даже если у вас их сто штук.
Country Amiant - Regno All Rianto
Аватара пользователя
Count_Raven
Супермодератор
 
Сообщения: 1156
Зарегистрирован: 06 окт 2010, 15:00
Откуда: Country Amiant

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

Сообщение sergio11ofpp » 24 авг 2013, 11:00 ,  »  Сообщение:#19

У меня не может быть ошибки в Path так как я говрил если я возращаю $page я получаю cID cName...
sergio11ofpp
 
Сообщения: 53
Зарегистрирован: 05 июл 2013, 12:00

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

Сообщение sergio11ofpp » 24 авг 2013, 11:06 ,  »  Сообщение:#20

Код: Выделить всё
Fatal error: Call to a member function getAreaCustomStyleRule() on a non-object

Это error
sergio11ofpp
 
Сообщения: 53
Зарегистрирован: 05 июл 2013, 12:00

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

Сообщение Count_Raven » 24 авг 2013, 12:10 ,  »  Сообщение:#21

sergio11ofpp писал(а):
Код: Выделить всё
Fatal error: Call to a member function getAreaCustomStyleRule() on a non-object

Это error

Вам надо полностью дебажить. Т.е. смотреть в какой строке эта функция вызывается в каком файле и полностью весь путь проследить. Там сразу ясно станет почему так происходит.
Country Amiant - Regno All Rianto
Аватара пользователя
Count_Raven
Супермодератор
 
Сообщения: 1156
Зарегистрирован: 06 окт 2010, 15:00
Откуда: Country Amiant

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

Сообщение sergio11ofpp » 24 авг 2013, 12:31 ,  »  Сообщение:#22

Код: Выделить всё
$path = ($_POST['path']);
     $page = Page::getByPath($path);
   echo json_encode($page);

так всё работает

Код: Выделить всё
$a->display($page);

как только Добовляю это выскакивает еррор
sergio11ofpp
 
Сообщения: 53
Зарегистрирован: 05 июл 2013, 12:00

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

Сообщение sergio11ofpp » 24 авг 2013, 12:36 ,  »  Сообщение:#23

C:\UwAmp\www\concrete\elements\block_area_header_view.php on line 5 пишет тут
Код: Выделить всё
$c = Page::getCurrentPage();
$areaStyle = $c->getAreaCustomStyleRule($a);

if($areaStyle && $areaStyle->getCustomStyleRuleID() ){ ?></div><?php  } ?>

Вэтом файле это $arestyle это же Layout он тут при чём???
sergio11ofpp
 
Сообщения: 53
Зарегистрирован: 05 июл 2013, 12:00

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

Сообщение Count_Raven » 24 авг 2013, 13:09 ,  »  Сообщение:#24

А, ну, видимо $c = Page::getCurrentPage(); возвращает NULL или false. Короче, нет объекта текущей страницы.
Хм... Надо думать.
Country Amiant - Regno All Rianto
Аватара пользователя
Count_Raven
Супермодератор
 
Сообщения: 1156
Зарегистрирован: 06 окт 2010, 15:00
Откуда: Country Amiant

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

Сообщение vbnm » 25 авг 2013, 00:40 ,  »  Сообщение:#25

не знаю, что ты хочешь сделать но взял твой код и сделал так:
Код: Выделить всё
$path = ($_POST['path']);- работает и без этой строки и с ней, в принципе она тут и не нужна, как по мне
$page = Page::getByPath("/blog");
$a = new Area('Main');
$ret = $a->display($page);

убрал нафиг это:
echo json encode($ret);

запрашивамая страница ("/blog");отобразила основную свою часть, то есть "main"
в моем коде просто:
Код: Выделить всё
$a->display($page);

у тебя
Код: Выделить всё
$ret = $a->display($page);

одно и то же, только нафик нам пустой $ret ? когда мы убрали echo json encode($ret);
непонятно, что ты хочешь сделать?
код при котором страница выводится полностью тебе дали:
Код: Выделить всё
<?php  defined('C5_EXECUTE') or die("Access Denied.");?>
  <?php 
$page = Page::getByPath("/about");
/* Получаем и отображаем area: */
$a = new Area('Main');
$a->disableControls();
 $a->display($page);
/* если нужно получить содержимое сайдбара, то дабавляем: */
 $as = new Area('Sidebar');
         $as->display($page);
?>

осталось дело за малым
вместо
$page = Page::getByPath("/about");

либо ввести новую переменную "$", и в нее подгружать навигацию, либо как-то напрямую связать с навигацией, либо оставить это делать мастерам вручную.
но естесно желательно использовать встроенный автонав, там неплохая сортировка
vbnm
 
Сообщения: 462
Зарегистрирован: 02 июл 2011, 01:44

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

Сообщение Count_Raven » 25 авг 2013, 13:40 ,  »  Сообщение:#26

Дело в том, что вы это делаете на странице, а sergio11ofpp, видимо, делает это в tool или любом другом подобном месте. Поэтому $c = Page::getCurrentPage(); не возвращает ничего, так как нет никакого Current Page. Поэтому у вас работает, а у него тот же самый код уже не работает.
Country Amiant - Regno All Rianto
Аватара пользователя
Count_Raven
Супермодератор
 
Сообщения: 1156
Зарегистрирован: 06 окт 2010, 15:00
Откуда: Country Amiant

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

Сообщение sergio11ofpp » 25 авг 2013, 19:39 ,  »  Сообщение:#27

А если не с tools где прописывать этот код?я то не хочу чтоб страница обновлялась??
sergio11ofpp
 
Сообщения: 53
Зарегистрирован: 05 июл 2013, 12:00

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

Сообщение Count_Raven » 25 авг 2013, 20:33 ,  »  Сообщение:#28

Вот так вот прям сразу никак не скажу.
Если бы дело было в вашем коде, то мы бы решили вопрос. Но код является частью ядра Concrete5 и находится в месте, где идет работа с Areas. Тут мы это дело наверное никак не обойдем. По-любому это можно решить самому, т.е. обойти этот код, может написать свой класс для работы с Areas на основе имеющегося кода или что-то в этом роде. Сказать как это сделать вот прям так сразу не могу. Если я буду это делать - я точно сделаю. Но у меня совсем нет времени, так бы поэкспериментировал и выложил готовый архив с решенной проблемой.
Ну, грубо говоря - надо изобрести велосипед.
Может быть вы решите это дело и даже найдете какой-то простой ответ, о котором я даже не подозреваю. Будет ништяк =)

Может быть еще вызвать контроллер страницы, короче как-то придумать, чтобы Page::getCurrentPage() возвращала страницу. Надо переменные среды переопределить. Чтобы CurrentPage была объектом и нам его вернули. Как? - другой вопрос. Нужно изучить код, который это вызывает и подделать для Concrete5 объект страницы. Думать надо, смотреть. Мне кажется это достаточно просто. Надо попробовать и посмотреть как и откуда это все берется, а посмотреть легко - код лежит на ладони. Изучаем, смотрим, делаем, проверяем.

Скорее всего понадобится буквально пара строк кода. Надо просто посмотреть что нужно сделать.
Country Amiant - Regno All Rianto
Аватара пользователя
Count_Raven
Супермодератор
 
Сообщения: 1156
Зарегистрирован: 06 окт 2010, 15:00
Откуда: Country Amiant

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

Сообщение Count_Raven » 25 авг 2013, 20:39 ,  »  Сообщение:#29

Вот код в модели Page:
Код: Выделить всё
   /*
    * returns an instance of the current page object
    *
   */
   public static function getCurrentPage() {
      $req = Request::get();
      $current = $req->getCurrentPage();
      if (is_object($current)) {
         return $current;
      } else {
         global $c;
         return $c;
      }
   }

Поработайте в своем tool с Request. Может передадите туда cID или типа того.
Country Amiant - Regno All Rianto
Аватара пользователя
Count_Raven
Супермодератор
 
Сообщения: 1156
Зарегистрирован: 06 окт 2010, 15:00
Откуда: Country Amiant

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

Сообщение Count_Raven » 25 авг 2013, 20:46 ,  »  Сообщение:#30

Вот из request.php:
Код: Выделить всё
public function __construct($path) {
   $this->requestPath = $path;
   $this->parse();
}

Попробуйте создать перед вашим кодом объект Request, куда передадите ваш $path.
Либо вот там же:
Код: Выделить всё
   /**
    * Set the current page
    * @param Page $page
    * @return void
    */
   public function setCurrentPage($page) {
      $this->currentPage = $page;
   }

Передайте туда объект страницы, который вы уже получили во время getByPath.
Как я понимаю, вызов будет из статичного контекста, ваши set'ы не должны быть переопределены (если конечно это где-то по пути не делается).
Вроде должна появиться у вас CurrentPage.

Пробуйте. Если что - пишите. Будем вместе разбираться.
Country Amiant - Regno All Rianto
Аватара пользователя
Count_Raven
Супермодератор
 
Сообщения: 1156
Зарегистрирован: 06 окт 2010, 15:00
Откуда: Country Amiant

Пред.След.

Вернуться в Помощь по concrete5

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

cron