Не работает поиск, несмотря на видимое отсутствие ошибки в запросе
Плагин добавляет несколько полей к таблице Topic, после этого по ним необходимо настроить поиск. Модифицировал ACEMySearch, добавил функции по образцу имеющейся GetTopicsIdByRegExp, выводил получившийся запрос — базой обрабатывается корректно, результаты есть, но на страницу поиска ничего не попадает. Например, поиск по дате подачи объявления(это как раз объект, который добавляется плагином к топику):
Функция, которая ищет(делал на основе ACEMySearch):
Думал, DBSimple как-то переделывает подставленное значение, но при специально допущенной ошибке в sql выводится запрос, аналогичный приведенному выше, на который находится ненулевой результат. Работает только простейшая функция поиска по 2 полям, которые могут иметь значения 0 и 1(по строкам и с like, и с "=" не работает). С чем такое еще м.б. связано?
SELECT SQL_CALC_FOUND_ROWS DISTINCT topic_id
FROM new_topic
WHERE (
topic_driveType =1
AND topic_time1 = '2011-08-29'
)
ORDER BY topic_id ASC
LIMIT 0 , 20
Функция, которая ищет(делал на основе ACEMySearch):
public function GetTopicsIdByTime($Times, &$iCount, $iCurrPage, $iPerPage, $aParams)
{
$aResult=array();
if (!$aParams['bSkipTags']) {
if(isset($Times[1])){
$sql = "
SELECT DISTINCT topic_id
FROM ".Config::Get('db.table.topic')."
WHERE (topic_driveType= 0 AND topic_time1 = ? AND topic_time2 = ?)
ORDER BY
topic_id ASC
LIMIT ?d, ?d
";
$aRows=$this->oDb->selectPage($iCount, $sql,
$Times[0],$Times[1],
($iCurrPage-1)*$iPerPage, $iPerPage);
}else{
$sql = "
SELECT DISTINCT topic_id
FROM ".Config::Get('db.table.topic')."
WHERE (topic_driveType= 1 AND topic_time1 = ?)
ORDER BY
topic_id ASC
LIMIT ?d, ?d
";
$aRows=$this->oDb->selectPage($iCount, $sql,
$Times[0],
($iCurrPage-1)*$iPerPage, $iPerPage);
}
}
if ($aRows) {
foreach ($aRows as $aRow) {
$aResult[]=$aRow['topic_id'];
}
}
return $aResult;
}
Думал, DBSimple как-то переделывает подставленное значение, но при специально допущенной ошибке в sql выводится запрос, аналогичный приведенному выше, на который находится ненулевой результат. Работает только простейшая функция поиска по 2 полям, которые могут иметь значения 0 и 1(по строкам и с like, и с "=" не работает). С чем такое еще м.б. связано?
- 0
- 30 августа 2011, 14:13
- syjgin
- Оставить комментарий
Sphinx - есть ли возможность добавить поле в индекс из плагина?
Мой плагин добавляет 2 новых поля в таблицу топиков. По ним необходимо осуществлять поиск.
Как я понял, для этого необходимо создать новый полнотекстовый индекс в таблице и изменить конфигурационный файл sphinx. Но в каталоге livestreet я его не нашел(только тот, что используется при инсталляции). Хуков в классе search — тоже.
Необходимо менять системный конфигурационный файл sphinx, лежащий в /etc или есть способ сделать это в папке плагина?
Или для этих целей проще настроить ACEMySearch?
Как я понял, для этого необходимо создать новый полнотекстовый индекс в таблице и изменить конфигурационный файл sphinx. Но в каталоге livestreet я его не нашел(только тот, что используется при инсталляции). Хуков в классе search — тоже.
Необходимо менять системный конфигурационный файл sphinx, лежащий в /etc или есть способ сделать это в папке плагина?
Или для этих целей проще настроить ACEMySearch?
[solved]Не отправляется сообщение пользователям
Делаю плагин, в котором пользователям, выбранным по значению добавленного поля, отсылается сообщение — всё примерно как с отправкой сообщений подписчикам блога, но шаблон сообщения пришлось изменить. Для этого сделал модуль, наследующий Notify, и добавил свою функцию по образцу SendTopicNewToSubscribeBlog:
Почему-то при заполнении тела письма шаблоном(oViewerLocal->Fetch) в браузер выводится этот шаблон и все дальнейшие шаги не выполняются. Если присвоить переменной $sBody простую текстовую строку, этого не происходит, но и письмо тоже не доставляется, но с этим уже позже разберусь
public function SendNewMatch(ModuleUser_EntityUser $oUserTo, ModuleTopic_EntityTopic $oTopic, ModuleBlog_EntityBlog $oBlog, ModuleUser_EntityUser $oUserTopic) {
/**
* Передаём в шаблон переменные
*/
$this->oViewerLocal->Assign('oUserTo',$oUserTo);
$this->oViewerLocal->Assign('oTopic',$oTopic);
$this->oViewerLocal->Assign('oBlog',$oBlog);
$this->oViewerLocal->Assign('oUserTopic',$oUserTopic);
/**
* Формируем шаблон
*/
//ошибка
$sBody=$this->oViewerLocal->Fetch(Plugin::GetTemplatePath(__CLASS__).'notify.new_match.tpl');
/**
* Если в конфигураторе указан отложенный метод отправки,
* то добавляем задание в массив. В противном случае,
* сразу отсылаем на email
*/
if(Config::Get('module.notify.delayed')) {
$oNotifyTask=Engine::GetEntity(
'Notify_Task',
array(
'user_mail' => $oUserTo->getMail(),
'user_login' => $oUserTo->getLogin(),
'notify_text' => $sBody,
'notify_subject' => $this->Lang_Get('notify_subject_new_match').' «'.htmlspecialchars($oBlog->getTitle()).'»',
'date_created' => date("Y-m-d H:i:s"),
'notify_task_status' => self::NOTIFY_TASK_STATUS_NULL,
)
);
if(Config::Get('module.notify.insert_single')) {
$this->aTask[] = $oNotifyTask;
} else {
$this->oMapper->AddTask($oNotifyTask);
}
} else {
/**
* Отправляем email
*/
$this->Mail_SetAdress($oUserTo->getMail(),$oUserTo->getLogin());
$this->Mail_SetSubject($this->Lang_Get('notify_subject_new_match').' «'.htmlspecialchars($oBlog->getTitle()).'»');
$this->Mail_SetBody($sBody);
$this->Mail_setHTML();
$this->Mail_Send();
}
}
Почему-то при заполнении тела письма шаблоном(oViewerLocal->Fetch) в браузер выводится этот шаблон и все дальнейшие шаги не выполняются. Если присвоить переменной $sBody простую текстовую строку, этого не происходит, но и письмо тоже не доставляется, но с этим уже позже разберусь
Изменение конфига плагина
Пытаюсь сделать страницу, на которой можно было бы изменить массив значений в конфигурационном файле плагина, расположенного в каталоге plugins/sport/config/config.php и содержащего один массив:
При обработке попробовал использовать Config::Set, но ничего не произошло. Lang используется, потому что на странице настроек еще необходимо добавить русский перевод для каждого из значений массива.
Или изменение конфигурационного файла иначе, как вручную, не предусмотрено?
$config['sport'] = array('v1','v2','v3');
return $config;
При обработке попробовал использовать Config::Set, но ничего не произошло. Lang используется, потому что на странице настроек еще необходимо добавить русский перевод для каждого из значений массива.
if(!empty($_REQUEST))
{
$res='';
foreach($_REQUEST as $rel)
{
$this->Lang_AddMessage($rel[0],$rel[1]);
$res[]=$rel[0];
}
var_dump($config['sport']);
Config::Set('plugin.sport.sport',$res);
}Или изменение конфигурационного файла иначе, как вручную, не предусмотрено?
Пытаюсь добавить поле БД и 2 метода к модулю User, не получается
До этого редактировал напрямую User.mapper.class.php и User.entity.class.php в движке, захотел от этого избавиться, сделал по образцу плагина l10n:
plugins/sport/classes/hooks/HookSport.class.php:
Читать дальше
plugins/sport/classes/hooks/HookSport.class.php:
Читать дальше
[РЕШЕНО]Использование хуков в плагине
1
Дочитал документацию и этот топик, пытаюсь добавить поле при регистрации, но, похоже, поставил функцию не там, где её ищет движок:
В этом случае при регистрации появляется следующая ошибка:
Также пробовал создавать внутри плагина каталог classes/hooks с файлом hookMyPlugin.class.php:
Но в этом случае совсем ничего не происходит. Если просто добавить хук в /classes/hooks в корневой каталог, то всё работает. Но хотелось бы расположить все файлы внутри каталога плагина
//PluginMyPlugin.class.php
public function Init() {
$this->Hook_AddExecFunction('template_form_registration_end','add_field',10);
}
public function add_field($aVars) {
var_dump("some additional field");
}
В этом случае при регистрации появляется следующая ошибка:
Warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'add_field' not found or invalid function name in /var/www/localhost/htdocs/live/engine/modules/hook/Hook.class.php on line 139Также пробовал создавать внутри плагина каталог classes/hooks с файлом hookMyPlugin.class.php:
class PluginMyPlugin_HookMyPlugin extends Hook {
public function RegisterHook ()
{
this -> AddHook('template_form_registration_end','RegEnd',__CLASS__,10);
}
public function RegEnd ($aVars) {
//return $this -> Viewer_Fetch (Plugin::GetTemplatePath (__CLASS__) . 'reg_end.tpl');
var_dump("Hook it!");
}
}Но в этом случае совсем ничего не происходит. Если просто добавить хук в /classes/hooks в корневой каталог, то всё работает. Но хотелось бы расположить все файлы внутри каталога плагина