использование JParameter в Joomla

#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 говорит выше.