#php #joomla
#php #joomla
Вопрос:
Я подумываю об использовании JParams для хранения даты последнего посещения определенной страницы на сайте Joomla 1.7.1. Итак, в коде я делаю что-то вроде:
$last_run = $params->get('last_visit', '2000-01-01');
// set last_run to current run time
$params->set('last_visit', $now);
Проблема, очевидно, в том, что недавно установленное значение для last_visit
не сохраняется, хотя и устанавливается.
Есть ли какой-нибудь способ сохранить параметры без выполнения запроса к БД? Спасибо
Комментарии:
1. что это за версия Joomla? 1.5 или 1.6
2. 1.7.1— извините, следовало бы сделать это более понятным.
3. ОК. У меня есть еще один вопрос, под страницей вы подразумеваете статью или пункт меню?
Ответ №1:
Вы могли бы сделать это с помощью плагина контента, который запускается при просмотре.
public function onContentPrepare(...) {
...store hit date into table...
}
Преимущество этого метода в том, что вам не нужны никакие взломы ядра.
Комментарии:
1. Спасибо, Майк — но я не пытаюсь сохранить значение в БД по разным причинам — я хочу сохранить фактический параметр.
2. Я понимаю, но даже тогда разумно не взламывать ядро и не использовать плагин. Если вы не планируете создавать плагин, вы могли бы создать переопределение содержимого для страницы элемента и сохранить новый параметр оттуда (опять без взломов).
componentscom_contentviewsarticletmpldefault.php
3. хорошо, но вопрос в том, «как сохранить параметр»? Я ожидал, что для этого должна быть какая-то функция Jparam::store ().
4. смотрите ответ infinitys на этот вопрос.
Ответ №2:
Вот пример решения вашей проблемы, но имейте в виду, что это для Joomla 1.5
// Get instance of the table object of your component
$table =amp; JTable::getInstance( 'mytable');
// Set the item, this could be Article ID for example
$table->load($id);
// Load the parameters through JParameter
$params = new JParameter($table->params);
$params->set($key,$value);
$table->params = $params->toString();
// Save to database
$table->store();
Все это можно было бы сделать в плагине, если вы не хотите изменять ядро компонента, в противном случае, если это компонент, который вы создаете, вы можете установить это в модели компонента и вызывать его из контроллера при каждом сохранении.
Комментарии:
1. @infinity — спасибо за совет, но опять же, это было бы просто установкой параметров для таблицы, а не для параметров компонента, зарегистрированных в таблице jos_extensions (jos_components в Joomla 1.5x), верно?
2. По словам основной команды Joomla, нет способа сделать то, что я считал возможным (например. используя функцию типа Jparameter::store ()). Вам нужно делать в основном то, что @infinity говорит выше.