Ошибка при редактировании записи

При редактировании записи, если ничего не менять, не срабатывает функция UpdateCategory. Достаточно добавить хотя бы один символ и редактирование проходит.

Во функция:

public function UpdateCategory(PluginQcategories_ModuleQcategories_EntityQcategories $oCategory) {
		$sql = "UPDATE ".Config::Get('plugin.qcategories.table.qcategories')."
			SET
        category_pid = ?,
			  category_url = ?,
			  category_url_full = ?,
			  category_title = ?,
			  category_text = ?,
        category_sort = ?
			WHERE
        category_id = ?d
		";
		if ($this->oDb->query($sql,$oCategory->getPid(),$oCategory->getUrl(),$oCategory->getUrlFull(),$oCategory->getTitle(),$oCategory->getText(),$oCategory->getSort(),$oCategory->getId()))
		{
			return true;
		}
		return false;
	}


А вот лог запроса:

[2016-01-28 15:09:35][5720][4983][DEBUG][UPDATE prefix_qcategories
			SET
        category_pid = NULL,
			  category_url = 'other',
			  category_url_full = 'other',
			  category_title = 'Другое',
			  category_text = 'Дефолтная категория.',
        category_sort = '1'
			WHERE
        category_id = 1
		]
[2016-01-28 15:09:35][5720][4983][DEBUG][  -- 30 ms; returned '0']

Подскажите, пожалуйста, в чем может быть ошибка.

6 комментариев

avatar
Сам ответил на вопрос:
если ничего не менять, не срабатывает функция UpdateCategory. Достаточно добавить хотя бы один символ и редактирование проходит.
avatar
Но в результате функция возвращает false и вылетает системная ошибка, когда должно произойти просто сохранение без изменений. Взять, к примеру, топик. Открываем любой, жмём «редактировать» и ничего не меняя жмём сохранить. Что происходит?

У меня же выкидывает ошибку, а вот если хоть в каком-нибудь поле сделать любое изменение, все нормально сохраняется. Хз. Делал по аналогии с плагином статических страниц. Все вроде идентично, но тот плагин сохраняет, мой — нет.
Да и с предыдущим своим сравнивал, должно работать, но что-то упускаю, видимо.
avatar
Это косяк LS.
Для исправления добавь в свой маппер такой метод:
protected function IsSuccessful($mRes)
    {
        return $mRes === false or is_null($mRes) ? false : true;
    }

И при insert/update/delete в методах маппера возвращай результат так:
public function UpdateCategory(PluginQcategories_ModuleQcategories_EntityQcategories $oCategory) {
		$sql = "UPDATE ".Config::Get('plugin.qcategories.table.qcategories')."
			SET
        category_pid = ?,
			  category_url = ?,
			  category_url_full = ?,
			  category_title = ?,
			  category_text = ?,
        category_sort = ?
			WHERE
        category_id = ?d
		";
	$res=$this->oDb->query($sql,$oCategory->getPid(),$oCategory->getUrl(),$oCategory->getUrlFull(),$oCategory->getTitle(),$oCategory->getText(),$oCategory->getSort(),$oCategory->getId());
        return $this->IsSuccessful($res);
}
  • ort
  • +2
avatar
Спасибо! Попутно еще вопрос по файлу plugin.xml, чтоб не создавать отдельного топика: в файле есть строчки:

<requires>
    <livestreet>1.0.3</livestreet>
    <plugins>
    </plugins>
  </requires>

Как правильно прописывать плагины и как это работает? Должно ли, допустим, в той же админке отображаться или это просто информация в файле?
avatar
Вот так.
        <plugins>
            <plugin>realtime</plugin>
        </plugins>


На что влияет? — просто не активируется плагин, пока не будет активирован плагин из requires.

Правда здесь есть косяк — при деактивации плагина движок не проверяет есть ли другие активные плагины, зависящие от него. Поэтому если деактивировать какой-нибудь плагин от которого зависят другие — все может упасть))

Поэтому перед деактивацией плагина я проверяю нет ли активных плагинов, которые зависят от него.
    /**
     * Перед деактивацией проверяем активны ли зависимые плагины.
     * Это важно, если деактивировать этот плагин с оставленными зависимостями - все вывалится в fatal.
     *
     * @return bool
     */
    public function Deactivate() {
        $aPlugins = $this->Plugin_GetList();
        $aActivePlugins = $this->Plugin_GetActivePlugins();

        $aDependentPlugins = array();

        foreach ($aPlugins as $sPluginName => $oPlugin) {
            if (!in_array($sPluginName, $aActivePlugins)) {
                continue;
            }

            if ($oPlugin['property']->requires->plugins) {
                foreach ($oPlugin['property']->requires->plugins->children() as $sReqPlugin) {
                    if ($sReqPlugin == 'realtime') {
                        $aDependentPlugins[] = func_camelize($oPlugin['code']);
                    }
                }
            }
        }

        if (!empty($aDependentPlugins)) {
            $this->Message_AddError(
                $this->Lang_Get(
                    'plugin.realtime.deactivation_dependency_error',
                    array('plugins_codes' => implode(', ', $aDependentPlugins))
                ),
                null,
                true
            );
            return false;
        }

        return true;
    }
avatar
Спасибо!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.