Модуль на Ajax и Кэш.

Sandero

Салага
Доброго времени суток, форумчане! Я у вас впервые, так что не судите строго!
Проблема следующего характера, отказывается работать модуль SJ Contact.
Честно говоря, даже упустил момент, когда он перестал работать.
В общем выдает ошибку: "Fatal error: Uncaught exception 'Exception' with message 'Serialization of 'JXMLElement' is not allowed' in /usr/local/pem/vhosts/139536/webspace/httpdocs/sabali.kz/libraries/joomla/cache/controller/callback.php:174 Stack trace: #0 /usr/local/pem/vhosts/139536/webspace/httpdocs/sabali.kz/libraries/joomla/cache/controller/callback.php(174): serialize(Array) #1 /usr/local/pem/vhosts/139536/webspace/httpdocs/sabali.kz/libraries/joomla/application/module/helper.php(462): JCacheControllerCallback->get(Array, Array, 'b9c656944bbc54a...', true, Array) #2 /usr/local/pem/vhosts/139536/webspace/httpdocs/sabali.kz/modules/mod_sj_contact_ajax/mod_sj_contact_ajax.php(31): JModuleHelper::moduleCache(Object(stdClass), Object(JRegistry), Object(stdClass)) #3 /usr/local/pem/vhosts/139536/webspace/httpdocs/sabali.kz/libraries/joomla/application/module/helper.php(175): include('/usr/local/pem/...') #4 /usr/local/pem/vhosts/139536/webspace/httpdocs/sabali.kz/libraries/joomla/document/html/renderer/module.php(107): JModuleHelper::renderModule in /usr/local/pem/vhosts/139536/webspace/httpdocs/sabali.kz/libraries/joomla/cache/controller/callback.php on line 174 "

в 31 строчке $list = JModuleHelper::moduleCache ($module, $params, $cacheparams);


Предыдущая часть модуля :
require_once dirname(__FILE__).'/core/helper.php';

if(!class_exists('plgSystemPlg_Sj_Contact_Ajax')){
echo JText::_('WARNING_NOT_INSTALL_PLUGIN');
return;
}

$layout = $params->get('layout', 'default');
$cacheid = md5(serialize(array ($layout, $module->id)));
$cacheparams = new stdClass;
$cacheparams->cachemode = 'id';
$cacheparams->class = 'ContactAjax';
$cacheparams->method = 'getList';
$cacheparams->methodparams = $params;
$cacheparams->modeparams = $cacheid;
$list = JModuleHelper::moduleCache ($module, $params, $cacheparams);
$captcha_type = $params->get('captcha_type');
$captcha_dis = $params->get('captcha_dis');
$captcha_disable = $params->get('captcha_disable');



Сломал всю голову, не хватает знаний... Куда копать?
 

WMix

герр M:)ller
Партнер клуба
Последнее редактирование:

Sandero

Салага
https://bitbucket.org/joomla/joomla-platform/src/247ba8d88526/libraries/joomla/utilities/xmlelement.php#cl-19

Код:
php -r "serialize(new SimpleXmlElement('<root/>'));"

Fatal error: Uncaught Exception: Serialization of 'SimpleXMLElement' is not allowed in Command line code:1
Stack trace:
#0 Command line code(1): serialize(Object(SimpleXMLElement))
#1 {main}
  thrown in Command line code on line 1
боюсь дело не в кэше

не сериализируй JXMLElement
Я дико извиняюсь, если я Вас правильно понял нужно править строку
$cacheid = md5(serialize(array ($layout, $module->id)));
вот так?
$cacheid = md5(array ($layout, $module->id));

Прежде чем написать попробовал, увы... Можно наводку по-детальнее?
PS Я не программист, но есть огромная нужда...
 

Sandero

Салага
Код:
var_dump($module->id)
Не сочтите на наглость, правда, не понимаю как применить эту функцию в моем коде... Не могли бы Вы помочь мне?
Вот код модуля:

<?php
/**
* @package Sj Contact Ajax
* @version 2.5
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
* @copyright (c) 2013 YouTech Company. All Rights Reserved.
* @author YouTech Company http://www.smartaddons.com
*
*/
defined('_JEXEC') or die;

if (!defined('DS')) {
define('DS', DIRECTORY_SEPARATOR);
}

require_once dirname(__FILE__).'/core/helper.php';

if(!class_exists('plgSystemPlg_Sj_Contact_Ajax')){
echo JText::_('WARNING_NOT_INSTALL_PLUGIN');
return;
}
$layout = $params->get('layout', 'default');
$cacheid = md5(serialize(array ($layout, $module->id)));
$cacheparams = new stdClass;
$cacheparams->cachemode = 'id';
$cacheparams->class = 'ContactAjax';
$cacheparams->method = 'getList';
$cacheparams->methodparams = $params;
$cacheparams->modeparams = $cacheid;
$list = JModuleHelper::moduleCache ($module, $params, $cacheparams);
$captcha_type = $params->get('captcha_type');
$captcha_dis = $params->get('captcha_dis');
$captcha_disable = $params->get('captcha_disable');

if($captcha_dis == 1){
if($captcha_type == 0){
$captcha_plg = JPluginHelper::importPlugin('captcha');
if($captcha_plg == null){
echo JText::_('WARNING_NOT_INSTALL_PLUGIN_RECAPTCHA');
return;
}
}
}

$user =& JFactory::getUser();
$currentSession = & JFactory::getSession() ;
if ($list != false){
$is_ajax = !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';
if($is_ajax){
$ctajax_modid = JRequest::getVar('ctajax_modid', null);
if($ctajax_modid == $module->id){
if(isset($_POST['task'])){
if($_POST['task'] == 'checkcaptcha'){
$ss_c = $currentSession->get('codeCaptcha'.$module->id);
$result = new stdClass();
if($_POST['captcha'] != $ss_c){
$result->valid = false;
}else{
$result->valid = true;
}
echo json_encode($result);
die();
}
if($_POST['task'] == 'sendmail'){
if($captcha_dis == 1) {
if($captcha_disable == 1 && $user->id != 0 ){
}else{
if($captcha_type == 0){
JPluginHelper::importPlugin('captcha');
$dispatcher = JDispatcher::getInstance();
JRequest::setVar('recaptcha_challenge_field', $_POST['recaptcha_challenge']);
JRequest::setVar('recaptcha_response_field', $_POST['recaptcha_response']);
$res = $dispatcher->trigger('onCheckAnswer',$_POST['recaptcha_response']);
$result = new stdClass();
if(!$res[0]){
$result->error_captcha = 0;
echo json_encode($result);
die();
}else{
ContactAjax::_processSendMail();
}
}
}
}
ContactAjax::_processSendMail();
}
}
}
}else{
require JModuleHelper::getLayoutPath($module->module, $layout);
require JModuleHelper::getLayoutPath($module->module, $layout.'_js');
}
} else {
echo JText::_('WARNING_MASSAGE');
}
 

WMix

герр M:)ller
Партнер клуба
я не знаю что такое $module->id и попросил задампить var_dump($module->id) и показать то что получилось.
 

Sandero

Салага
string(3) "132" яЛП Fatal error: Uncaught exception 'Exception' with message 'Serialization of 'JXMLElement' is not allowed' in /usr/local/pem/vhosts/139536/webspace/httpdocs/sabali.kz/libraries/joomla/cache/controller/callback.php:174 Stack trace: #0 /usr/local/pem/vhosts/139536/webspace/httpdocs/sabali.kz/libraries/joomla/cache/controller/callback.php(174): serialize(Array) #1 /usr/local/pem/vhosts/139536/webspace/httpdocs/sabali.kz/libraries/joomla/application/module/helper.php(462): JCacheControllerCallback->get(Array, Object(JRegistry), 'b9c656944bbc54a...', true, Array) #2 /usr/local/pem/vhosts/139536/webspace/httpdocs/sabali.kz/modules/mod_sj_contact_ajax/mod_sj_contact_ajax.php(31): JModuleHelper::moduleCache(Object(stdClass), Object(JRegistry), Object(stdClass)) #3 /usr/local/pem/vhosts/139536/webspace/httpdocs/sabali.kz/libraries/joomla/application/module/helper.php(175): include('/usr/local/pem/...') #4 /usr/local/pem/vhosts/139536/webspace/httpdocs/sabali.kz/libraries/joomla/document/html/renderer/module.php(107): JModuleHelper:: in /usr/local/pem/vhosts/139536/webspace/httpdocs/sabali.kz/libraries/joomla/cache/controller/callback.php on line 174
 
Сверху