Проблема с передачей переменной в компонент.

Тема в разделе "Модернизация расширений", создана пользователем k1ava, 17.07.2008.

  1. k1ava
    Offline

    k1ava Недавно здесь

    Регистрация:
    17.07.2008
    Сообщения:
    12
    Симпатии:
    0
    Всех приветствую.
    Столкнулся при модернизации компонента с непонятной для меня вещью, при переходе с главной (там календарик) на компонент по ссылке
    index.php?option=com_jmovies&task=date&relizday=2008-07-01
    никак не могу там выудить $relizday.
    $relizday = mosGetParam($_REQUEST,"relizday",null); эту строку пихал чуть ли не во все дыры, а значение не присваивается. ПРи этом тот же $task замечательно работает, хоть и передается тем же методом (с виду).
    Вообщем уже 4 часа ночи и сдался. Если есть какие мысли или надо что уточнить то прошу отписаться.
     
  2.  
  3. sectus
    Offline

    sectus специалист

    Регистрация:
    19.04.2006
    Сообщения:
    1 210
    Симпатии:
    46
    Пол:
    Мужской
    Ответ: Проблема с передачей переменной в компонент.

    Странно, я проверил, у меня работает. Версия джумлы 1.0.*?
     
  4. infoman
    Offline

    infoman Недавно здесь

    Регистрация:
    28.08.2007
    Сообщения:
    575
    Симпатии:
    12
    Пол:
    Мужской
    Ответ: Проблема с передачей переменной в компонент.

    $relizday=$_GET["relizday"];
    echo $relizday;
    попробуй вставь

    Добавлено через 1 минуту
    20 08-07-01 наверно будет как 2020%08-07-01
    ибо пробел
     
    Последнее редактирование: 17.07.2008
  5. k1ava
    Offline

    k1ava Недавно здесь

    Регистрация:
    17.07.2008
    Сообщения:
    12
    Симпатии:
    0
    Ответ: Проблема с передачей переменной в компонент.

    Если б все так легко было )))))
    $relizday=$_GET["relizday"]; с этого я начинал, пока не нашел mosGet
    А насчет пробела - это очепятка.
     
  6. infoman
    Offline

    infoman Недавно здесь

    Регистрация:
    28.08.2007
    Сообщения:
    575
    Симпатии:
    12
    Пол:
    Мужской
    Ответ: Проблема с передачей переменной в компонент.

    а помоему нет разницы сколько компонентах не юзал свои гет переменные и так и эдак всё равно они передавали параметр
    иногда правда забывал кавычки поставить и долго бился рогом о монитор ища ошибку :)
    может у вас такая же ошибка? (синтаксис)?
     
  7. k1ava
    Offline

    k1ava Недавно здесь

    Регистрация:
    17.07.2008
    Сообщения:
    12
    Симпатии:
    0
    Ответ: Проблема с передачей переменной в компонент.

    Вот календарик, он является модулем на всех страницах сайта :
    Код (CODE):
    1. function getDateLink($day, $month, $year) {
    2.       global $database, $Itemid;
    3.       if (strlen($month) == 1){
    4.            $month = "0" . $month;
    5.       }
    6.       if (strlen($day) == 1){
    7.          $day = "0" . $day;
    8.       }
    9.  
    10.       $gettimebrowse = $year . "-" . $month . "-" . $day;
    11.  
    12.       $sectionid = $this->general[0];
    13.       $categoryid = $this->general[1];
    14.      
    15.       //28-31 database calls so it would be better to do it just once and read the values to arrays
    16.             $sql = "SELECT COUNT(*) as amount FROM #__jmovies WHERE created LIKE '%$gettimebrowse%';";
    17.      
    18.          
    19.       $database->setQuery($sql);
    20.       $rows = $database->loadObjectList();
    21.       $num_rows = $rows[0]->amount;
    22.  
    23.       if ($num_rows > 0){
    24.            $link = sefRelToAbs('index.php?option=com_jmovies&task=date&relizday=' . $gettimebrowse);
    25.            $relizday = $gettimebrowse;
    26. return $link;

    Он генерит ссылку вида :
    /index.php?option=com_jmovies&task=date&relizday=2008-07-17 (На этом форуме почему то 2008 не всегда пишется вместе, а разделяется как видите на примере ссылки, на самом скрипте - все ок)

    Вот отрывок сверху из jmovies.php
    Код (CODE):
    1. # Check language file
    2.     if (file_exists($mainframe->getCfg('absolute_path').'/components/'.$option.'/languages/'.$mosConfig_lang.'.php')) {
    3.         include_once($mainframe->getCfg('absolute_path').'/components/'.$option.'/languages/'.$mosConfig_lang.'.php');
    4.     } else {
    5.         include_once($mainframe->getCfg('absolute_path').'/components/'.$option.'/languages/italian.php');
    6.     }
    7.    
    8.     [COLOR="Red"]$relizday = mosGetParam($_REQUEST,"relizday",null);[/COLOR]
    9.         $id = mosGetParam($_REQUEST,"id",null);
    10.     $itemid = mosGetParam($_REQUEST,"itemid",null);
    11.     $catid = mosGetParam($_REQUEST,"catid",null);
    12.     $jmoviesid = mosGetParam($_REQUEST,"jmoviesid",null);
    13.     $suchstring = mosGetParam($_REQUEST,"suchstring",null);
    14.     $sstring = mosGetParam($_REQUEST,"sstring",null);
    15.         $details = mosGetParam($_REQUEST,"details",null);
    16.  
    17.     # Check access
    18.     $is_editor = (strtolower($my->usertype) == 'editor' || strtolower($my->usertype) == 'publisher' || strtolower($my->usertype) == 'manager' || strtolower($my->usertype) == 'administrator' || strtolower($my->usertype) == 'super administrator' );
    19.     $is_user   = (strtolower($my->usertype) <> '');

    Тут у нас прием GET переменных.

    Спускаемся вниз по jmovies где наша функция(Функция зарегена с ней все ок - этот код я не выкладываю) :
    Код (CODE):
    1. function ajaxdate($start=0,$movimento=1){
    2.         global $database, $cinConfig, [COLOR="Red"]$relizday[/COLOR], $mainframe, $option, $my, $bOutputEntities;
    3.        
    4.         $objResponse = new xajaxResponse($cinConfig['CharEncoding']);
    5.         if($bOutputEntities) $objResponse->outputEntitiesOff();
    6.    
    7.         $database->setQuery("SELECT count(id) FROM #__jmovies WHERE access <= ".(int)$my->gid." AND published = '1'");
    8.         $nrows = $database->loadResult();
    9.    
    10.     $query = "SELECT DISTINCT a.id, a.thumbname, a.filename, a.titolo, a.titolo2, a.votes, a.votesum, a.produzione, a.custom2, a.distribuzione, a.descrizione, a.anno, a.nazione, a.counter, a.created FROM #__jmovies AS a"
    11.                         . "\nWHERE a.access <= ".(int)$my->gid." AND a.created LIKE '%[COLOR="Red"]$relizday[/COLOR]%'"
    12.                         . "\nORDER BY a.titolo ASC"
    13.                         . "\n LIMIT ".(int)$start.",".(int)$cinConfig['perpage'];
    14.         $database->setQuery($query);
    15.         $rows = $database->loadObjectList();
    16.        
    17.         $sHtml="";
    18.         $sHtml = listItems($rows,$nrows,$start,'ajaxdate',$cinConfig['perpage']);
    19.        
    20.         $objResponse->addAssign("divfly","innerHTML",$sHtml);
    21.         if($movimento) $objResponse->script("slideList.slideIn();");
    22.         return $objResponse;
    23.                
    24.     }



    Если вначале jmovies.php задать $relizday значение, то функция работает нормально.

    В чем косяк??? Я его 4 часа искал - заепался...
     
    Последнее редактирование: 17.07.2008
  8. sectus
    Offline

    sectus специалист

    Регистрация:
    19.04.2006
    Сообщения:
    1 210
    Симпатии:
    46
    Пол:
    Мужской
    Ответ: Проблема с передачей переменной в компонент.

    В php нет областей видимости переменных. Чтобы видеть переменную $relizday нужно ее перед получением объявить глобальной.
     
  9. k1ava
    Offline

    k1ava Недавно здесь

    Регистрация:
    17.07.2008
    Сообщения:
    12
    Симпатии:
    0
    Ответ: Проблема с передачей переменной в компонент.

    Кажись мое спасение...
    Ток вот яндекс мне не ответил как ее обьявить и в каком файле это лучше делать.

    Добавлено через 1 час 7 минут
    Короче натыркал global везде - не помогло - жду дельных советов ))))))))))
     
    Последнее редактирование: 17.07.2008
  10. sectus
    Offline

    sectus специалист

    Регистрация:
    19.04.2006
    Сообщения:
    1 210
    Симпатии:
    46
    Пол:
    Мужской
    Ответ: Проблема с передачей переменной в компонент.

    Дай файлы потыркать...
     
  11. infoman
    Offline

    infoman Недавно здесь

    Регистрация:
    28.08.2007
    Сообщения:
    575
    Симпатии:
    12
    Пол:
    Мужской
    Ответ: Проблема с передачей переменной в компонент.

    а нельзя непосредственно в функции обьявить эту переменную?
    зачем в глобал?
    попробуй сначало так

    Добавлено через 1 минуту
    тоесть
    function ajaxdate($start=0,$movimento=1){ global $database, $cinConfig, $mainframe, $option, $my, $bOutputEntities; $objResponse = new
    $relizday = mosGetParam($_REQUEST,"relizday",null);
    xajaxResponse($cinConfig['CharEncoding']); if($bOutputEntities) $objResponse->outputEntitiesOff(); $database->setQuery("SELECT count(id) FROM #__jmovies WHERE access <= ".(int)$my->gid." AND published = '1'"); $nrows = $database->loadResult();

    Добавлено через 1 минуту
    а ещё понатыкай echo везде после обьявлений
    тогда увидиш где она выпадает
     
    Последнее редактирование: 18.07.2008
  12. k1ava
    Offline

    k1ava Недавно здесь

    Регистрация:
    17.07.2008
    Сообщения:
    12
    Симпатии:
    0
    Ответ: Проблема с передачей переменной в компонент.

    jmovies.php + calendar.php
    Все тож самое, ток relizday терь называется : gettimebrowse
     

    Вложения:

    • files.rar
      Размер файла:
      20 КБ
      Просмотров:
      2
  13. sectus
    Offline

    sectus специалист

    Регистрация:
    19.04.2006
    Сообщения:
    1 210
    Симпатии:
    46
    Пол:
    Мужской
    Ответ: Проблема с передачей переменной в компонент.

    Эта функция вызывается через аякс, значит вызывается где-то по ссылке в JS, но в эту ссылку, я так понял переменная не помещена.
     
  14. k1ava
    Offline

    k1ava Недавно здесь

    Регистрация:
    17.07.2008
    Сообщения:
    12
    Симпатии:
    0
    Ответ: Проблема с передачей переменной в компонент.

    С этого то я и начинал ))) Я уж стоко перепробовал, что тут все и не опишешь.

    Добавлено через 1 минуту
    Вряд ли. Ибо если задать значение переменной вначале страницы jmovies , то функция замечательно работает из этого я делаю вывод что ее достаточно получит на самой странице.
     
    Последнее редактирование: 18.07.2008
  15. sectus
    Offline

    sectus специалист

    Регистрация:
    19.04.2006
    Сообщения:
    1 210
    Симпатии:
    46
    Пол:
    Мужской
    Ответ: Проблема с передачей переменной в компонент.

    Тогда после первого
    $gettimebrowse = mosGetParam($_REQUEST,"gettimebrowse",null);
    ставим
    if (!$gettimebrowse) die();

    тестируем... и описываем что получилось.
     
  16. k1ava
    Offline

    k1ava Недавно здесь

    Регистрация:
    17.07.2008
    Сообщения:
    12
    Симпатии:
    0
    Ответ: Проблема с передачей переменной в компонент.

    [​IMG]
     
  17. sectus
    Offline

    sectus специалист

    Регистрация:
    19.04.2006
    Сообщения:
    1 210
    Симпатии:
    46
    Пол:
    Мужской
    Ответ: Проблема с передачей переменной в компонент.

    Обновление
    if (!$gettimebrowse) die();
    else echo "<script>alert('".$gettimebrowse."');</script>";

    и можно скрин всего окна браузера?
     
    k1ava нравится это.
  18. k1ava
    Offline

    k1ava Недавно здесь

    Регистрация:
    17.07.2008
    Сообщения:
    12
    Симпатии:
    0
  19. sectus
    Offline

    sectus специалист

    Регистрация:
    19.04.2006
    Сообщения:
    1 210
    Симпатии:
    46
    Пол:
    Мужской
    Ответ: Проблема с передачей переменной в компонент.

    Можно, кстати при получении пихать переменную в куки... и по идее она должна вынуться из реквеста.
    т.е. после $gettimebrowse = mosGetParam($_REQUEST,"gettimebrowse",null); делать
    setcookie("gettimebrowse", $gettimebrowse);


    Верхние опыты показали, что я прав, по поводу аякса
     
  20. k1ava
    Offline

    k1ava Недавно здесь

    Регистрация:
    17.07.2008
    Сообщения:
    12
    Симпатии:
    0
    Ответ: Проблема с передачей переменной в компонент.

    С куками работает, но ток один раз...
    Т.е записывая куку он ее так и использует несмотря на то что дата теперь другая.
    Из этого вопрос. КАк очистить куку, т.е. какую строку добавить перед
    $gettimebrowse = mosGetParam($_REQUEST,"gettimebrowse",null); делать
    setcookie("gettimebrowse", $gettimebrowse);

    Ну или как в AJAX добавить переменную.
     
  21. sectus
    Offline

    sectus специалист

    Регистрация:
    19.04.2006
    Сообщения:
    1 210
    Симпатии:
    46
    Пол:
    Мужской
    Ответ: Проблема с передачей переменной в компонент.

    вот этого я и боялся... а нельзя очищать куку перед вызовом : )
    тогда в функции тоже вставить
    $gettimebrowse = mosGetParam($_REQUEST,"gettimebrowse",null); делать
    setcookie("gettimebrowse", $gettimebrowse);
     

Поделиться этой страницей

Загрузка...