Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 13 Ответов
  • 1842 Просмотров
*

RuCosinus

  • Осваиваюсь на форуме
  • 19
  • 0 / 1
Добрый день.

В свое время понадобилось разместить форму на сайте, но ни один из существующих компонентов не подошел и был написан компонент(именно компонент), основной задачей которого было выведение на сайт формы и последующей ее некоторой обработки. Почему компонент? Потому что единственная более-менее вменяемая статья рассказывала о написании именно компонента :) По сути это компонент-пустышка с несколькими файлами js и CSS, основной код которого находится в файлике default шаблона в папочке view. Работало это таким образом годами, но тут добрался до нее недоброжелательный робот, итогом чего стало гигантское количество спама, ибо конкретно эта форма CAPTCHA не имела. Встала задача прикрутить капчу.
Я нашел простенькую капчу, которая состоит, по сути, из единственного php-файлика. Его суть проста, как топор: он генерирует картинку по заданным переменным и сохраняет сам текст для проверки в некую сессионную переменную. Если я вызываю этот файлик из своего default.php не изменяя, то картинка показывается, но не работает проверка, потому что в оригинале, этот файлик работал с сессиями стандартными средствами PHP, то есть
Код
session_start(); 
$_SESSION['captcha'] = $capcha;
А Joomla так работать не хочет, Joomla понимает только вот так, как мы знаем
Код
$session = JFactory::getSession();
$session->set('captchaa', $capcha);
.
Но если я вставляю в файл-генератор картинки Joomla код работы с сессиями, то картинка вообще не отображается, значит файлик кем-то считается кривым :(
То есть у меня проблема в следующем - я имею два рядом лежащих php файла, один понимает работу с сессиями в php формате, второй в jooomla. Вопрос - как их подружить? Может нужно где-то прописать, что этот новый файлик тоже принадлежит компоненту, чтобы в нем тоже обрабатывались стандартные Joomla переменные и методы?
Подскажите, плз, пути решения.
*

draff

  • Гуру
  • 5803
  • 434 / 7
  • ищу работу
Прикрутил недавно kcaptcha , был трабл с картинкой.
Проверяй путь. Хотя народ на серче пишет, что лучше проверять на заполнение поля, скрытому от юзеров, но видное ботам
« Последнее редактирование: 05.08.2014, 16:23:46 от draff »
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Текст скрипта с капчей приведите сюда. Там у вас вообще фреймворк подключен Joomla?
интернет-блог: http://websiteprog.ru
*

RuCosinus

  • Осваиваюсь на форуме
  • 19
  • 0 / 1
draff :
Нет, это абсолютно точно связано с сессиями, потому что если я убираю джумловский код работы с сессиями, то все ок, картинка отображается.

zomby6888:
Нет, что вы, ничего там не подключено, поэтому и интересуюсь. Код под спойлером, строки работы с сессиями по обоим методам закомментированы.

Спойлер
[свернуть]
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
А Joomla так работать не хочет, Joomla понимает только вот так, как мы знаем
Я об этом не знал ^-^. А если серьезно, то Joomla понимает все, что написано на PHP.

Код, который вы привели, только нарисует картинку и помещает значение captcha в сессию. Его не трогайте, оставьте в первоначальном виде. Вам нужно добавить в свою форму поле, значение которого будет сравниваться с тем, что в сессии.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Вроде как Joomla сессии в базе хранит по умолчанию а php в файлах. Но и там и там можно использовать суперглобальный массив $_SESSION. А если хочется работать через встроенный механизм сессий ( JFactory::getSession(); ) то надо подключать фреймворк в скрипте.
интернет-блог: http://websiteprog.ru
*

RuCosinus

  • Осваиваюсь на форуме
  • 19
  • 0 / 1
robert
прошу прощения, за такой словесный оборот, что-то меня в графоманию ударило, пока писал свой вопрос. Старался наиболее доступно донести :)

robert,zomby6888
понимаете в чем дело, при формировании страницы идет обращение в том числе и к captcha.php, который я выложил, следовательно если я раскоментирую вот эти строки
Код
session_start(); 
$_SESSION['captchaa'] = $capcha;
то, в теории, в переменной сессии captchaa я найду то, что мне надо. Но, по моему, она пустая :(
Сейчас проверю, я просто понял, что предыдущая проверка, которую я проводил, была не совсем корректна.
*

RuCosinus

  • Осваиваюсь на форуме
  • 19
  • 0 / 1
Такс... Привожу итоги эксперимента.

1) Что делал: В файле captcha.php комментируем все строки с работой с сессиями, а в default.php в блоке, который выполняется после нажатия submit , пишем следующее:
Код
if (isset($_POST['submit_button']))
{
session_start();
$_SESSION['captchaa'] = '999';
$code2 = $_SESSION['captchaa'];
echo $code2;
...
Результат: после нажатия кнопки submit, на страницу выводится число 999

2) Что делал: прописываем в captcha.php следующие строки записи переменной в сессию:
Код
session_start(); 
$_SESSION['captchaa'] = '999';
В default.php пишем
Код
if (isset($_POST['submit_button']))
{
$code2 = $_SESSION['captchaa'];
echo $code2;
...
Результат: после нажатия кнопки submit, на страницу ничего не выводится.

То есть из файла в файл так ничего и не передается :( Почему?

*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
я думаю что при переходе от скрипта к фреймворку активизируется новая сессия. в captcha.php подключите фреймворк попробуйте:
Код: php
ddefine('_JEXEC', 1);
define('JPATH_BASE', dirname(__FILE__). '/../../../');
define('DS', DIRECTORY_SEPARATOR);
require_once JPATH_BASE . DS . 'includes' . DS . 'defines.php';
require_once JPATH_BASE . DS . 'includes' . DS . 'framework.php';
$app = JFactory::getApplication('site')->initialise();
интернет-блог: http://websiteprog.ru
*

RuCosinus

  • Осваиваюсь на форуме
  • 19
  • 0 / 1
zomby6888
Прописал ваш код в начале captcha.php.
Я правильно понимаю, что я просто вставляю его в начало без каких-либо изменений (кроме задвоенной d в первом ddefine) и фреймворк должен подключится? Никакие пути дополнительно прописывать не нужно? Или все берется из глобальных переменных и они заведомо верные?
Просто после этого картинка CAPTCHA не появляется, значит ошибка в скрипте. Сейчас все закоментирую и буду по одной записи включать, чтобы понять, что ему не нравится.
*

RuCosinus

  • Осваиваюсь на форуме
  • 19
  • 0 / 1
Проверил, где спотыкается.
Чем то ему не нравятся require_once.
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
пути проверьте здесь define('JPATH_BASE', dirname(__FILE__). '/../../'); количество /../../ должно быть равно вложенности пути к вашему скрипту от корня сайта. Или вобще просто пропишите define('JPATH_BASE', 'полный_путь_к_корню_сайту'). вот так вот например: define('JPATH_BASE', 'Z:\home\localhost\www\site').
« Последнее редактирование: 06.08.2014, 19:34:35 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

RuCosinus

  • Осваиваюсь на форуме
  • 19
  • 0 / 1
Да, да, я уже нашел этот косяк и исправил :)
Но все равно спасибо.
Тестирую сессии.
*

RuCosinus

  • Осваиваюсь на форуме
  • 19
  • 0 / 1
zomby6888,
да, вы были правы. Похоже сессии действительно "перещелкивались", теперь родные PHP сессии все выдают верно, но думаю и с joomla-вскими проблем не будет.
Огромное спасибо за помощь.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Расширение od jshopping categories на Joomla 5

Автор ironDiaper

Ответов: 0
Просмотров: 312
Последний ответ 13.01.2024, 17:54:34
от ironDiaper
Непонятная работа плагина "Поиск"

Автор Snip

Ответов: 0
Просмотров: 979
Последний ответ 20.03.2023, 10:47:56
от Snip
Формирование ссылок для компонента Joomla Tags

Автор stepan39

Ответов: 6
Просмотров: 2439
Последний ответ 05.02.2023, 15:22:13
от tweenpix
Функции доступности в Joomla 4

Автор keykeeper

Ответов: 2
Просмотров: 1445
Последний ответ 25.07.2022, 10:54:06
от keykeeper
Не могу установить языковой пакет для компонента Joomla Events Manager ((jem))

Автор Ded Magomed

Ответов: 0
Просмотров: 1310
Последний ответ 24.05.2022, 15:06:38
от Ded Magomed