Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 13 Ответов
  • 2800 Просмотров
*

Очередной вебмастер

  • Давно я тут
  • 768
  • 55 / 0
  • лысый умный дядя
Работаю с системным плагином - который переписывает view для формы редактирования материала.
Столкнулся с глюком - включаю плагин, меняется шаблон вывода формы редактирования материала, создаю материал - присваиваю категорию B - сохраняю.
Выхожу - захожу снова на редактирования - категория сбрасывается на uncategorized. При отключенном плагине - com_content при редактировании существующего материала, категорию сохраняет, не сбрасывает.
Вопрос - где хранится инфа о присвоенной материалу категории? (Сессия, база данных, JS)
Буду признателен, если опытные разработчики пояснят.
Сайты на Joomla, разработка и поддержка
----------
Помог ответ - жми плюс!
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
в бд естественно! в таблице #__content в поле catid записуется id выбранной категории!
Уху, именно так.

Цитировать
категория сбрасывается на uncategorized
Видимо где-то потеряли catid и при сохранении он не учитывается. По дефу ставит Uncategorized.
*

Очередной вебмастер

  • Давно я тут
  • 768
  • 55 / 0
  • лысый умный дядя
Я просто копаюсь с плагином по переписыванию вида и вот он "собака злая" ну ни в какую не сохраняет категории...
Может от того что ему уже 8 месяцев...
Господа, кто нибудь может глянуть код и сказать в чем косяк?
Вещь так то достаточно интересная...
Сайты на Joomla, разработка и поддержка
----------
Помог ответ - жми плюс!
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Хмм, вроде как вывод категории есть.

Код: php
<li><?php echo $this->form->getLabel('catid'); ?>
<?php echo $this->form->getInput('catid'); ?></li>

Вообще код шаблона один в один с тем, что в оригинале. Значит при сохранении что-то не так. Надо устанавливать плагин и расследовать.

UPDATE:
Поставил плагин. Проблема не в том, что категория не сохраняется (она как раз таки сохраняется), а в том, что список категорий не подхватывает нужную (нет selected) и она всегда первая в списке. Буду копать дальше.
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
А не расскажете что пытаетесь сделать?
Сделать так, чтобы плагин работал как полагается  ^-^

Мое расследование дампом:

Код
echo '<pre>';
print_r($this->form);
echo '</pre>';

выявило, что в самой форме catid пустое!
Код
[catid] => 

Вот поэтому selected и не срабатывает. Но почему catid не подхватывается - вот в чем вопрос ::)
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
ну это логично ) но код плагина интересный ) мне больше интересно что автор пытается соорудить и для чего! может есть способ попроще!
В том то и дело, что код очень любопытный и почти работает. Автор попытался переопределить файлы шаблона в админке, а насколько нам известно такое возможно только для фронтенда.
*

Очередной вебмастер

  • Давно я тут
  • 768
  • 55 / 0
  • лысый умный дядя
В том то и дело, что код очень любопытный и почти работает. Автор попытался переопределить файлы шаблона в админке, а насколько нам известно такое возможно только для фронтенда.
Вот и я о том же. Дмитрий. очень меня тема зацепила...
Вот только не понятно для чего это )
Чтобы изменить форму редактирования материала, так как нужно мне или любому другому разработчику, БЕЗ хака системных файлов!

очень надеюсь, что Дима сможет найти причину отсутствия catid... а то я как бы новичок в PHP :(
Сайты на Joomla, разработка и поддержка
----------
Помог ответ - жми плюс!
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Тем не менее решение вашей проблемы это чуть допилить модель:
Код: php
class ContentModelArticle2 extends ContentModelArticle
{
public function getItem()
{
$item = parent::getItem();
$this->setState( 'article.id', $item->id );
return $item;
}
}


и да метод onAfterInitialise лучше переделать так:
Код: php
function onAfterInitialise()
{
$input = JFactory::getApplication()->input;
/** Set criteria for the View you want to override */
if ( JFactory::getApplication()->getClientId() // если в админке вернет 1 если на сайте вернет 0 ( 1 и true синоним, как и 0 и false ( Конечно если для сравнения не использовать === ))
&& $input->get( 'option', '', 'cmd' ) == 'com_content'
&& $input->get( 'view', '', 'cmd' ) == 'article'
&& $input->get( 'layout', '', 'cmd' ) == 'edit'
) {

/** Override JRequest View and Layout - register the view (example in the layout/com_content folder) */
$input->set( 'view', 'article2' ); // устанавливаем значения через тот же JFactory::getApplication()->input класс JRequest считается устаревшим
$input->set( 'layout', 'edit2' );
JLoader::register( 'ContentViewArticle2', __DIR__ . '/com_content/views/article/ContentViewArticle2.php' );
}
}
Опередил ;) Я как раз вчера вечером раскопал, что теряется article.id :) Правда не понял, почему он теряется...

Это тоже системный плагин! И дело в принципе не в этом, а в том, что код сам по себе интересен и показывает возможности движка.

Вообщем внес изменения, чуть подправил метод getItem(), так как ругался на strict стандарты - вызов метода должен быть такой же, как у родителя.  Все работает - плагин приложил.

[вложение удалено Администратором]
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
ну я так.. на скорую руку.. а то как бы на часах было уже без 2 часа ночи с копейками ;D
Ну я тоже, раскопал и не стал делать - поздно было уже. Кстати, есть идеи, почему article.id теряется? Мы же вроде как не в новой статье находимся...
*

Очередной вебмастер

  • Давно я тут
  • 768
  • 55 / 0
  • лысый умный дядя
Блин ну вы и шарите :o
Спасибо, мужики, подсобили.
Дима отдельное спасибо за готовое рабочее решение. *DRINK*
Сайты на Joomla, разработка и поддержка
----------
Помог ответ - жми плюс!
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Re: Категория материала - где хранится?
« Ответ #10 : 16.11.2012, 13:18:29 »
Блин ну вы и шарите :o
Спасибо, мужики, подсобили.
Дима отдельное спасибо за готовое рабочее решение. *DRINK*
Пожалуйста ;)

Я кстати нашел, почему article.id теряется. Проблема в populateState():
https://github.com/joomla/joomla-cms/blob/2.5.x/libraries/joomla/application/component/modeladmin.php#L805

$this->getName() возвращает article2, что логично - класс модели в плагине назван ContentModelArticle2.

Отсюда вывод, можно переделать плагин и использовать такой код:

Код: php
/**
 * Extend the real model.
 */
/**
 * Extend the real model.
 */
class ContentModelArticle2 extends ContentModelArticle
{
/**
* Method to get a correct name for the model. This will ensure,
* that the model state will work properly.
*
* @return  string  Model name.
*/
public function getName()
{
return 'article';
}
}

Я у себя проверил - работает  ^-^
*

Очередной вебмастер

  • Давно я тут
  • 768
  • 55 / 0
  • лысый умный дядя
Re: Категория материала - где хранится?
« Ответ #11 : 16.11.2012, 13:46:39 »
Спасибо, Дим.
Надеюсь часть этого обсуждения поможет Фей найти выход.
И кстати, если что первоначально авторство плагина принадлежит AmyStephen  http://github.com/AmyStephen/Layout-Override-Plugin
Сайты на Joomla, разработка и поддержка
----------
Помог ответ - жми плюс!
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Re: Категория материала - где хранится?
« Ответ #12 : 16.11.2012, 13:53:46 »
И кстати, если что первоначально авторство плагина принадлежит AmyStephen  http://github.com/AmyStephen/Layout-Override-Plugin
Да, конечно. Её копирайт я не тер.

Вообщем, тут надо репу почесать, да выдать полезный плагин: с нормальными названиями классов, с нормальными названиями файлов, с возможностью выбора переопределения и т.п.
*

Очередной вебмастер

  • Давно я тут
  • 768
  • 55 / 0
  • лысый умный дядя
Re: Категория материала - где хранится?
« Ответ #13 : 16.11.2012, 15:00:47 »
с возможностью выбора переопределения и т.п.
ВОТ, ВОТ... Я об этом и мечтал когда его увидел.. Хотелось чтоб можно было для каждой категории например свою форму переопределять.
Сайты на Joomla, разработка и поддержка
----------
Помог ответ - жми плюс!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться