[не актуально]

Главные вкладки

Аватар пользователя Alt.F4 Alt.F4 17 июля 2011 в 8:37

Добрый день.
Рисую PHP-скриптом кривую для Яндекс-карты и столкнулся с проблемой...
Данный скрипт запускается после окончания всех остальных, таким образом глобальные переменные в нем недоступны.
Подскажите пожалуйста, каким способом Drupal передает переменную $user между страницами (сессия/куки)?
И как ее можно вызвать?
Спасибо.

Комментарии

Аватар пользователя v1adimir@drupal.org v1adimir@drupal.org 17 июля 2011 в 9:49

"Alt.F4" wrote:
Данный скрипт запускается после окончания всех остальных, таким образом глобальные переменные в нем недоступны.

Как такое возможно, если скрипт отрабатывается в контексте друпала? Чото мне не верится.

Аватар пользователя Alt.F4 Alt.F4 17 июля 2011 в 10:01

Насколько я понимаю, Drupal уже отрабоотал, а скрипт загружает сама карта.
var ml = new YMaps.YMapsML("graph.php");

И глобальные переменные недоступны
global $user;
isset($user) возвращает FALSE

Аватар пользователя v1adimir@drupal.org v1adimir@drupal.org 17 июля 2011 в 10:31

Alt.F4 wrote:
var ml = new YMaps.YMapsML("graph.php");

И глобальные переменные недоступны
global $user;
isset($user) возвращает FALSE

YMaps.YMapsML это вроде как JavaScript, а global $user; это типа как php.
В какой момент isset($user) вызывается, что-то я не понял?

Аватар пользователя direqtor direqtor 17 июля 2011 в 10:38

"Alt.F4" wrote:
var ml = new YMaps.YMapsML("graph.php");

Это вызов из JS. Поэтому сторонний файл graph.php запустится вне контекста друпала.
Добавьте в начало этого файл:

require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

А может вам и хватит загрузки до DRUPAL_BOOTSTRAP_ACCESS. Смотрите раздел Constants на http://api.drupal.org/api/drupal/includes--bootstrap.inc

Аватар пользователя Alt.F4 Alt.F4 17 июля 2011 в 11:26

"direqtor" wrote:
Добавьте в начало этого файл:
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
Чегой-то не работает. Если вставить в начале скрипта (перед header("Content-type: text/xml");)
то Яндекс-карта выдает ошибку Invalid xml document.
Если вставить в середине, то необходимый контекст вообще не формируется...

Аватар пользователя direqtor direqtor 17 июля 2011 в 13:36

"Alt.F4" wrote:
то Яндекс-карта выдает ошибку Invalid xml document.

А вы код этого инвалида XML смотрели? Вполне вероятно, что интерпретатор PHP написал туда вам ошибку, из-за чего XML и стал невалидным.

Аватар пользователя Alt.F4 Alt.F4 17 июля 2011 в 13:41

"direqtor" wrote:
А вы код этого инвалида XML смотрели? Вполне вероятно, что интерпретатор PHP написал туда вам ошибку, из-за чего XML и стал невалидным.
А как его посмотреть?
В исходном коде страницы эти вещи не отображаются...

Аватар пользователя Alt.F4 Alt.F4 17 июля 2011 в 14:20

<?php
header
("Content-type: text/xml");
echo 
'<?xml version="1.0" encoding="utf-8"?>
      <ymaps:ymaps xmlns:ymaps="http://maps.yandex.ru/ymaps/1.x"
       xmlns:repr="http://maps.yandex.ru/representation/1.x"
       xmlns:gml="http://www.opengis.net/gml"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://maps.yandex.ru/schemas/ymaps/1.x/ymaps.xsd">
<repr:Representation>
    <repr:Style gml:id="customStyle">
        <repr:lineStyle>
             <repr:strokeColor>0000FF80</repr:strokeColor>
            <repr:strokeWidth>4</repr:strokeWidth>
        </repr:lineStyle>
     </repr:Style>
</repr:Representation>
      <ymaps:GeoObjectCollection>
      <gml:featureMember>
      <ymaps:GeoObject>
      <gml:name>Track</gml:name>
      <gml:LineString>'
;
while (
$условие)
{
echo 
'<gml:pos>',$a,' ',$b,'</gml:pos>';
}
echo 
'</gml:LineString>
          <ymaps:style>#customStyle</ymaps:style>
          </ymaps:GeoObject>
          </gml:featureMember>
          </ymaps:GeoObjectCollection>
          </ymaps:ymaps>'
;
?>

Это содержимое graph.php.
Его работу можно оценить только на карте (есть или нет кривых).
В исходный код страницы данный текст не включается, поэтому что с ним стало после добавления drupal_bootstrap, я не знаю.

Аватар пользователя direqtor direqtor 17 июля 2011 в 14:23

Как трудно с детьми...
Какой XML-код отдавал скрипт graph.php до подключения bootstrap.inc? И каой стал отдавать после? Именно отдавать и именно в браузер.

Аватар пользователя v1adimir@drupal.org v1adimir@drupal.org 17 июля 2011 в 14:37

Вызвать graph.php через веб-сервер и в веб-браузере найти в меню "Page Source", или как-то так.

Прежде чем дальше задавать вопросы, пожалуйста, почитай где-нибудь "Web-дизайн для начинающих".

Аватар пользователя Alt.F4 Alt.F4 17 июля 2011 в 14:47

Ошибки при наличии:
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

Notice: Use of undefined constant DRUPAL_ROOT - assumed 'DRUPAL_ROOT' in /var/www/vhosts/***/includes/bootstrap.inc on line 1971
Warning: require_once(DRUPAL_ROOT/includes/errors.inc) [function.require-once]: failed to open stream: No such file or directory in /var/www/vhosts/***/includes/bootstrap.inc on line 1971
Fatal error: require_once() [function.require]: Failed opening required 'DRUPAL_ROOT/includes/errors.inc' (include_path='.:') in /var/www/vhosts/***/includes/bootstrap.inc on line 1971
Аватар пользователя direqtor direqtor 17 июля 2011 в 15:01

Вот теперь понятно. Это я не учел разницы между 6 и 7 друпалом. Smile

Вставьте вот так:

define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

Тогда все глобальные переменные друпал и его функции станут доступны в этом скрипте.