Добрый день.
Рисую PHP-скриптом кривую для Яндекс-карты и столкнулся с проблемой...
Данный скрипт запускается после окончания всех остальных, таким образом глобальные переменные в нем недоступны.
Подскажите пожалуйста, каким способом Drupal передает переменную $user между страницами (сессия/куки)?
И как ее можно вызвать?
Спасибо.
Комментарии
Как такое возможно, если скрипт отрабатывается в контексте друпала? Чото мне не верится.
Насколько я понимаю, Drupal уже отрабоотал, а скрипт загружает сама карта.
var ml = new YMaps.YMapsML("graph.php");
И глобальные переменные недоступны
global $user;
isset($user) возвращает FALSE
YMaps.YMapsML это вроде как JavaScript, а global $user; это типа как php.
В какой момент isset($user) вызывается, что-то я не понял?
Это вызов из JS. Поэтому сторонний файл graph.php запустится вне контекста друпала.
Добавьте в начало этого файл:
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
А может вам и хватит загрузки до DRUPAL_BOOTSTRAP_ACCESS. Смотрите раздел Constants на http://api.drupal.org/api/drupal/includes--bootstrap.inc
то Яндекс-карта выдает ошибку Invalid xml document.
Если вставить в середине, то необходимый контекст вообще не формируется...
А вы код этого инвалида XML смотрели? Вполне вероятно, что интерпретатор PHP написал туда вам ошибку, из-за чего XML и стал невалидным.
В исходном коде страницы эти вещи не отображаются...
Что вообще ваш graph.php должен отдавать? XML? Каким он был до подключения includes/bootstrap.inc? Какой стал после?
<?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, я не знаю.
Как трудно с детьми...
Какой XML-код отдавал скрипт graph.php до подключения bootstrap.inc? И каой стал отдавать после? Именно отдавать и именно в браузер.
direqtor, как посмотреть отдаваемый скриптом XML-код? Где его смотреть?
Открыть в браузере и нажать Вид-Исходный код.
Вызвать graph.php через веб-сервер и в веб-браузере найти в меню "Page Source", или как-то так.
Прежде чем дальше задавать вопросы, пожалуйста, почитай где-нибудь "Web-дизайн для начинающих".
Ошибки при наличии:
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
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
Вот теперь понятно. Это я не учел разницы между 6 и 7 друпалом.
Вставьте вот так:
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
Тогда все глобальные переменные друпал и его функции станут доступны в этом скрипте.
Просто используем сам индексный файл системы:
Drupal 6 - http://api.drupal.org/api/drupal/index.php/6/source
Drupal 7 - http://api.drupal.org/api/drupal/index.php/7/source
Мде.
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
Отдельно работает, а вот когда скрипт подгружает Яндекс-карта, то
isset($user) возвращает FALSE
...
Проверьте другие переменные http://api.drupal.org/api/drupal/developer--globals.php/7
direqtor, спасибо за помощь!
Плюнул, буду юзать GET.