Проблема с $_session в друпале? Поиск перерыл :)

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

Аватар пользователя rockon89 rockon89 8 января 2013 в 5:43

Доброй ночи.

У меня вопрос - какая у меня ошибка в коде, я не могу добавить данные в свою "$_session['name']. Каждый раз у меня выходит лишь "reload" в echo $_SESSION['b'];
без друпала скрипт работает.

"Rockon" wrote:
<?
//session_start();
include_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

echo $_SESSION['b'];
if ($_SESSION['b']=='reload'){ $_SESSION['b']='';} else {
$_SESSION['href1']='';
}

if ($_SESSION['href1']==''){
$reload='reload'; $_SESSION['b']=$reload;
?>
далее какой то html в перемешку с jquery и тп
<? } else {
?>
снова куча ненужного кода
<? } drupal_session_commit(); ?>

Комментарии

Аватар пользователя sas@drupal.org sas@drupal.org 8 января 2013 в 11:13

* In order to bootstrap Drupal from another PHP script, you can use this code:
* @code
* define('DRUPAL_ROOT', '/path/to/drupal');
* require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
* drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
* @endcode

Аватар пользователя rockon89 rockon89 8 января 2013 в 11:38

/path/to/drupal - полный путь? у меня скрипт лежит в корне сайта, в месте с DR7 и открывается через include('./index3.php'); прописанном в одной статье.(открывается в теле ноды)

Аватар пользователя rockon89 rockon89 8 января 2013 в 12:22

Notice: Constant DRUPAL_ROOT already defined в функции include() (строка 3 в файле x:\AppServ\www\gallery.php). - я тоже так по началу добавлял..

Аватар пользователя rockon89 rockon89 8 января 2013 в 13:33

Notice: Undefined index: superpuper в функции include() (строка 6 в файле x:\AppServ\www\gallery.php).
Notice: Constant DRUPAL_ROOT already defined в функции include() (строка 2 в файле x:\AppServ\www\gallery.php).

начало файла:

<?
define('DRUPAL_ROOT', getcwd());
include_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

if ($_SESSION['superpuper']=='reload'){ $_SESSION['superpuper']=''; echo 'CLEAR';} else {
$_SESSION['href1']=''; echo 'NO';
}

if ($_SESSION['href1']==''){
$_SESSION['superpuper']='reload ';
?>

сам скрипт отображается через ноду. В ноде%
<? include("gallery.php"); ?>

Аватар пользователя rockon89 rockon89 8 января 2013 в 13:57

может есть какой плагин? у меня скрипт - в одном файле и что во фрейме его отображать, что прямо в ноду вписать. Он будет работать. Проблема лишь с сессиями..

Аватар пользователя sas@drupal.org sas@drupal.org 8 января 2013 в 15:06

"rockon89" wrote:
у меня скрипт - в одном файле

- Сделайте простенький модуль с помощью http://drupal.org/project/module_builder
- делайте в папке модуля файл mymodule.inc и поместите туда нужные функции и объекты
- используйте для обращения по url hook_menu( в модуле mymodule.module или module_load_include для вызова функций из других *.module

Аватар пользователя rockon89 rockon89 8 января 2013 в 15:13

можно поподробнее, на данный момент я там вижу два больших текстовых поля:
module headler
module footer

простите за идиотский вопрос но куда мне вставлять то свой код? Biggrin
зы одним глазом пока читаю доки..

Аватар пользователя rockon89 rockon89 8 января 2013 в 15:29

попытался создать первый плагин, потыкав галочки для интереса.
вылезла ошибка:
Fatal error: Call to undefined function drush_print_r() in x:\AppServ\www\sites\all\modules\module_builder\includes\generate.inc on line 480

Аватар пользователя rockon89 rockon89 8 января 2013 в 16:14

вообщем нашел выход в том, что прописал все это дело в шаблоне .tpl.php
пока писал - нашел ошибку в коде. Спал мало, не сразу понял - суть в том, что у меня ссесия очищается, не успев сработать Smile как то так.
спасибо за плагин

Аватар пользователя rockon89 rockon89 8 января 2013 в 17:57

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

<div class="all">
                                <?
                                for ($i=1;$i<=10;$i++){
                                        if (is_dir("image/release/album".$i)){ ?>
                                <div class="one_album <?= $i ?>"><a href="/release/album<?= $i ?>/" onclick="return false;"><img src="imgsize.php?src=image/release/album<?= $i ?>/oblojka.jpg&w=200&h=200&zc=2"></a></div>
                                <? } } ?>
                                </div>

внутри страницы есть js

 $(document).ready(function(){
                        $(".one_album").click(function(){
                               
                                var v1=$(this).children("a").attr("href");
                                $.post("/ajax/session.php", {z1:v1}, function(res){
                                        //alert(v1);
                                        location.reload();
                        });    

так вот чем заменить $.post("/ajax/session.php", {z1:v1}, function(res) - что бы запрос ушел?
Если честно - от недосыпа я уже сломал просто мозг с друпал апи. разжуйте пожалуйста.

Аватар пользователя sas@drupal.org sas@drupal.org 8 января 2013 в 17:59

"rockon89" wrote:
$.post

$.ajax({
                                          type: 'POST',
                                          data: { op: 'action', type: 'make_photo_main', val: rel },
                                          url:'/my_module/ajax',
...
function my_module_menu(){
// ajax post function
$items["my_module/ajax"] = array(
'page callback' => 'my_module_ajax',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
...
return $items;
}
function my_module_ajax(){
...
global $user;
        if(isset($_POST['op'] ...

$output = array('status' => $status, 'data' => $data);
                drupal_json_output($output);
}

Аватар пользователя rockon89 rockon89 8 января 2013 в 18:31

у меня страница http://site.ru/?q=gallery
и далее был написан page--gallery.tpl.php
в котором висит самописный скрипт галереи в

скрипт писал не я. Ибо я ajax знаю плохо.
суть не в том, что делать в этом случае?
Мне то надо по клику на ссылку тупо вписать нужную ссылки(albumX и podalbumY) в сессию.

Аватар пользователя rockon89 rockon89 9 января 2013 в 5:09
  <div id="main">
        <?
             $url = $_SERVER["REQUEST_URI"];

            $_SESSION['href1']=$_GET['type'];
            $_SESSION['href2']='album'.$_GET['album'];

далее ссылка с $_get

<?
                        for ($i=1;$i<=10;$i++){
                                if (is_dir("image/release/album".$i)){ ?>
                        <div class="one_album <?= $i ?>"><a href="<?=$url ?>?type=release&album=<?= $i ?>" .....

ежели скрипт идет отдельно от друпала - все ок, работает как надо.
если в друпале

Ошибка:
Notice: Undefined index: type в функции include() (строка 216 в файле x:\AppServ\www\sites\all\themes\manko\templates\page--gallery.tpl.php).
Notice: Undefined index: album в функции include() (строка 217 в файле x:\AppServ\www\sites\all\themes\manko\templates\page--gallery.tpl.php).

Страница "/?q=gallery?type=release&album=1" не найдена.

Если в адресной строке вручную вбить
http://site.ru/?q=gallery?type=release&album=1

тоже самое.
А вы говорите, что работает..
Linux проще настроить, чем эту кмс. Просто везде грабли. Есть в природе плагин, позволяющий добавить свой php скрипт с ajax, с возможностью работы с сессией друпаши?

Или, можно хотя бы последовательность действий? Типо создаете модуль, добавляете туда хук (какой код хука), как перехватить это дело в скрипте.
Я только начинаю изучать азы веб программирования, сильно не серчайте.

Аватар пользователя sas@drupal.org sas@drupal.org 9 января 2013 в 10:28

"rockon89" wrote:
http://site.ru/?q=gallery?type=release&album=1[/quote]
Во первых у Вас 2 ? - у Вас уже неверный синтаксис,
Во вторых - это не "чистая ссылка" q используется для адреса страницы, надо типа http://site.ru/gallery?type=release&album=1
"rockon89" wrote:
Linux проще настроить, чем эту кмс

Знания Linux не являются "кольцов всевластия", не надо на "зеркало пенять" - изучите инструмент и Вы сможете им пользоваться.
"rockon89" wrote:
Или, можно хотя бы последовательность действий? Типо создаете модуль, добавляете туда хук (какой код хука), как перехватить это дело в скрипте

Можно конечно, пишите ТЗ, Вам дают консультации по реализации или создают модуль.

Аватар пользователя rockon89 rockon89 9 января 2013 в 13:28

спасибо, виновата моя невнимательность. но все равно остался нерешенным вопрос с ajax.

есть событие по клику в альбоме.

        $(".one_small").click(function(){
                $(this).children("div").css('opacity','0');
                $(".one_small").not(this).children("div").css('opacity','0.5');
               
                        var v1=$(this).children("a").attr("href");
                                $(".all_gros").css('opacity','0');
                                $.post("/ajax/session2.php", {z1:v1}, function(result){
                                        aler(v1);
                                        res=result.split('//-//');
                                        $(".all_gros").html(res[0]);
                                        $("#hr1").val(res[1]);
                                        $("#hr2").val(res[2]);
                                        $("#kiko").val(res[3]);
                                       
                                });
                                $(".all_gros").animate({
                                        opacity: "1"
                                }, 1000);
                });

подскажите пожалуйста, как это переписать, что бы работало с апи друпала?

Аватар пользователя sas@drupal.org sas@drupal.org 9 января 2013 в 14:11

По поводу /ajax/session2.php - писал Выше как обращаться к функции PHP для обработки и возврата результата, остальное jQuery - подключен по умолчанию, и не забывает что .click - переопределяет, если на Вашем селекторе уже повешены какие то другие .click другими модулями, то надо .bind или .live использовать.