Новости Joomla

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

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
Добрый день.
Вопрос по стандартному компоненту com_content. Не могу найти в каком файле идет само сохранение материала, т.е. запись в бд. Буду благодарен за подсказку)
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
А там многие файлы задействованы )
но если вы хотите программно создать материал то это делают так: http://ссылка вырезана, так как домен распространяет вирусы/blog/joomla/programvnoe-sozdanie-materiala-v-joomla-2-5
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
Вроде этого мне и нужно, только я не могу найти в каком файле это все записывается.
Объясню по подробнее. Мне из админки при создании нового материала необходимо сделать записи в сторонние таблицы. Добавил доп. поле, в него будет записываться текст, ну и при сохранении надо записать эту инфу в стороннюю табличку. Вот и не могу найти в каком месте проходит запись.
ЗЫ В последующем надо будет еще вытащить эту инфу при редактировании материала.
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
оу, тогда вам нужно написать контент плагин и для сохранения в стороннюю таблицу воспользоваться триггером onContentAfterSave!
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
Нда, если честно, то этот компонент слишком уж заморочан(. Другие куда было проще разбирать.
Если не сложно, то приведите пример, где в этом компоненте прописывается этот плагин. Я тяжело себе представляю как работать с плагинами, тригерами. На примере легче разобраться.
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
Я так понимаю что сохранение идет в файле administrator\components\com_content\models\article.php в функции
Цитировать
public function save($data)
и если быть точнее в строке
Цитировать
parent::save($data)
. Правильно?
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Я так понимаю что сохранение идет в файле administrator\components\com_content\models\article.php в функции  и если быть точнее в строке . Правильно?
правильно, но если вы измените тут код то вам придется забыть про обновления CMS! иначе все ваши правки исчезнут...
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Нда, если честно, то этот компонент слишком уж заморочан(. Другие куда было проще разбирать.
Если не сложно, то приведите пример, где в этом компоненте прописывается этот плагин. Я тяжело себе представляю как работать с плагинами, тригерами. На примере легче разобраться.
http://ссылка вырезана, так как домен распространяет вирусы/sozdanie-plagina
создаете каркас плагина по моему сервису!
выбираете в вкладе "События", группу content и событие onContentAfterSave
устанавливаете плагин!
идете plugins/content/plugin_name/plugin_name.php
находите в нем строку
Код: php
public function onContentAfterSave($context, $article, $isNew){	}
в этом методе в $context будет что то типа 'com_content.article'
в $article -  будет вся ваша запись
в $isNew - будет true если это новая запись

можете посмотреть мой плагин http://ссылка вырезана, так как домен распространяет вирусы/plaginy/plagin-dlya-prikrepleniya-fajlov-k-materialu в нем выполняются подобные дейстивя
« Последнее редактирование: 07.09.2013, 12:16:09 от Istaan »
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
правильно, но если вы измените тут код то вам придется забыть про обновления CMS! иначе все ваши правки исчезнут...
Я особо не люблю обновляться, чревато это бывает, но все же согласен, фигова. Поэтому буду дальше искать.
В массив $data в данном файле мои доп. поля передаются, все ок. Надо найти где обрабатывается эта инфа, где можно обработать инфу (проверить на правильность введенных символов и т.п.), ну и записать в табличку.
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
to Istaan
Во, отличная инфа) буду разбираться. Спасибо.
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Я особо не люблю обновляться, чревато это бывает, но все же согласен, фигова. Поэтому буду дальше искать.
В массив $data в данном файле мои доп. поля передаются, все ок. Надо найти где обрабатывается эта инфа, где можно обработать инфу (проверить на правильность введенных символов и т.п.), ну и записать в табличку.
ну я вам выше написал как сделать плагин,
вот только если вам нужно данные перед сохранением проверить то нужен не триггер onContentAfterSave, а onContentBeforeSave!
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
ну я вам выше написал как сделать плагин,
вот только если вам нужно данные перед сохранением проверить то нужен не триггер onContentAfterSave, а onContentBeforeSave!
Ок, логично, спасибо!
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Ок, логично, спасибо!
незачто, будут вопросы обращайтесь )
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
можете посмотреть мой плагин http://ссылка вырезана, так как домен распространяет вирусы/plaginy/plagin-dlya-prikrepleniya-fajlov-k-materialu в нем выполняются подобные дейстивя
Кстати, на данный момент передо мной стоит задача к стандартному материалу прикрутить сохранение минимум 2х дополнительных текстовых полей и прикрепления изображений к материалу (у вас файлов)
Цитировать
незачто, будут вопросы обращайтесь )
Обязательно)
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Кстати, на данный момент передо мной стоит задача к стандартному материалу прикрутить сохранение минимум 2х дополнительных текстовых полей и прикрепления изображений к материалу (у вас файлов)Обязательно)
2 дополнительных поля можно вставить при событии
Код: php-brief
function onContentPrepareForm($form, $data)
    {
        if (!($form instanceof JForm)) {
            $this->_subject->setError('JERROR_NOT_A_FORM');

            return false;
        }
//отсеиваем все кроме нашей формы
        if ($form->getName()!= 'com_content.article') {
            return true;
        }
//работаем добавили папку форм
$form->addFormPath(dirname(__FILE__). '/form');
//загрузили форму /form/contact.xml
$form->loadFile('contact', false);
//или добавляем динамически используя класс SimpleXMLElement и как раз для Обязательно добавив атрибут required
}
 public function onContentPrepareData($context, $data)
{
//Здесь мы должны заполнить $data для отображения значений полей, запрос из базы данных
if ($context !='com_content.article')
        {
            return true;
        }
//работаем
}
Советую глянуть плагин профиль пользователя в группе user. Там вы увидите решение подобной задачи
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
http://ссылка вырезана, так как домен распространяет вирусы/sozdanie-plagina
Отличная ссылочка. Никогда не сталкивался с созданием новых компонентов, плагинов и т.п. Только модифицировал уже готовые. Теперь попробую с нуля все сделать.

Есть опять же вопросы.
Код
public function onContentBeforeSave($context, $article, $isNew)
Я так понимаю функцию по обработке надо сюда прописывать?

Еще необходимо добавить текстовые поля при редактировании материала. Я так понимаю надо просто подредактировать шаблон в файле administrator\templates\bluestork\html\com_content\article\edit.php ? Правильно?
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Еще необходимо добавить текстовые поля при редактировании материала. Я так понимаю надо просто подредактировать шаблон в файле administrator\templates\bluestork\html\com_content\article\edit.php ? Правильно?
ну зачем что то редактировать?) я например через JS создаю элементы и все нужные поля ) и выводу их например в новой вкладке )) и никакой шаблон не трогаю )
« Последнее редактирование: 09.09.2013, 14:10:59 от Istaan »
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
ну зачем что то дерактировать?) я например через JS создаю элементы и все нужные поля ) и выводу их например в новой вкладке )) и никакой шаблон не трогаю )
Не, к сожалению данный вариант у меня не прокатит. JS не знаю впринципе. Даже не знаю как к данному "зверю" подходить.
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Не, к сожалению данный вариант у меня не прокатит. JS не знаю впринципе. Даже не знаю как к данному "зверю" подходить.
ну стоит начать учить, хотябы jQuery посмотрите, на нем булет в разы проще, и ничего особо сложного там нет! можно за пару дней освоить!
но если нужно срочно то делайте в шаблоне )

+ можете посмотреть видео уроки )
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
Есть вопрос по упаковке в архив плагина.
Создал папку с измененным шаблоном мне необходимым administrator\templates\bluestork\html\com_content\article\edit.php.
Как его теперь правильно добавить в архив, чтобы после установки плагина файлы скопировались по нужному мне пути?
Плагин у меня устанавливается, а файлы шаблона в нужную папку не копируются...

ЗЫ Точнее в папке administrator\templates\bluestork\html создал папки com_content\article\ и уже в конечной папке 3 файлика с шаблоном.
« Последнее редактирование: 10.09.2013, 18:43:17 от Sphinx »
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
Проблема все еще не решена.
В изначальной папке administrator\templates\bluestork\html создал папки com_content\article\. В папке article 3 моих файлика. Не могу понять, как установщику объяснить куда скопировать данные файлы при установке плагина. Сам плагин устанавливается без проблем, файлы же шаблонов не копируются и вышеописанные папки не создаются. Я так понимаю, что их надо прописать в XML файле плагина, но не могу найти какие необходимо добавить инстукции...
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
не знаю или можно так просто в XML указать каике файлы и куда пихать вне плагина,
но можете попробовать создать скрипт установки, и в нем копировать все что вам нужно в нужную папку!
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
не знаю или можно так просто в XML указать каике файлы и куда пихать вне плагина,
но можете попробовать создать скрипт установки, и в нем копировать все что вам нужно в нужную папку!
Понятно, тогда этот вопрос временно опустим.

2 дополнительных поля можно вставить при событии
Код: php-brief
public function onContentPrepareData($context, $data)
{
//Здесь мы должны заполнить $data для отображения значений полей, запрос из базы данных
if ($context !='com_content.article')
        {
            return true;
        }
//работаем
}
}
Советую глянуть плагин профиль пользователя в группе user. Там вы увидите решение подобной задачи
Я так понимаю, что onContentPrepareData как раз заполняет поля из БД. Но у меня переменные $context и $data вообще абсолютно пустые.
Больше даже, я ставлю в функции onContentPrepareData - exit; Но выполнение не останавливается, как будто данная функция вообще не вызывается. В чем может быть проблема, куда "копать"?
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Копать в том направлении что onContentPrepareData срабатывает на событие при подготовке данных!
и если у вас свой компонент то вы должны вызвать это событие, в бакэнде(тобишь в админке) это событие вызывает только компонент com_users
в пользовательской части  com_users и  com_contact
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
to Istaan
Копать в том направлении что onContentPrepareData срабатывает на событие при подготовке данных!
и если у вас свой компонент то вы должны вызвать это событие, в бакэнде(тобишь в админке) это событие вызывает только компонент com_users
в пользовательской части  com_users и  com_contact
ну а каким же тогда способом инфа достается в com_content? Тобишь есть возможность в плагине (ну в моем случае) достать инфу из БД и вывести ее в формы?
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
вы напишите сначала что хотите сделать ) и в админке или в пользовательской части?

p.s. попробуйте событие  onContentPrepareForm
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
вы напишите сначала что хотите сделать ) и в админке или в пользовательской части?
В админке  в редактировании материала уже сделал вывод дополнительных полей, которые можно будет заполнять, ну и соответственно в дальнейшем эта инфа будет выводиться на лицевой части сайта при просмотре статьи, к примеру. Сейчас надо сделать, чтобы инфа из БД заполняла поля, ну и при сохранении добавляла инфу в БД.
p.s. попробуйте событие  onContentPrepareForm
При данном событии у меня выводятся дополнительные поля при редактировании материала.
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
При данном событии у меня выводятся дополнительные поля при редактировании материала.
так почему при этом событии не заполнять сразу поля?)

в дальнейшем эта инфа будет выводиться на лицевой части сайта при просмотре статьи
вам нужно будет для этого отдельное событие
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
так почему при этом событии не заполнять сразу поля?)
Вообще да, сходу так и не додумался)
Код
[0] => JXMLElement Object
(
  [@attributes] => Array
  (
    [name] => tmplink
    [type] => text
    [label] => PLG_TMPLINK_LABEL
    [description] => PPLG_TMPLINK_DESC
    [size] => 20
    [default] =>
    )
    [0] =>
  )
Я так понимаю в [default] и надо записать то, чего мы вытаскиваем из БД к данной статье... правильно?
вам нужно будет для этого отдельное событие
Ну это дальше посмотрим... еще будет куча вопросов. Вывод контента начну делать, буду разбираться...
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
нет ) у вас же объект формы, а там есть метод setValue($name, $group = null, $value = null)
а событие onContentPrepareForm($form, $data)  в первом параметре передает форму!
вам нужно сделать что то типа:
Код: php
$form->setValue('название поля', 'Группа в котором поле (если нет группы то просто пустоту оставить)', 'Значение поля');
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Компонент для создания тестов Ari Quiz

Автор alex_noize

Ответов: 0
Просмотров: 1219
Последний ответ 25.02.2016, 20:31:51
от alex_noize
Переименовать com_content

Автор Sergeyy

Ответов: 3
Просмотров: 1159
Последний ответ 18.01.2016, 01:22:21
от dmitry_stas
Сортировка материала в RSS (view.feed.php) по дате создания

Автор bombapiter

Ответов: 7
Просмотров: 2482
Последний ответ 24.10.2014, 10:49:31
от bombapiter
Как проверить существует ли ID материала?

Автор sorrrrry

Ответов: 7
Просмотров: 2264
Последний ответ 15.10.2014, 16:52:58
от SmokerMan
Компонент для подмены файлов ядра jHacksPro

Автор rigin

Ответов: 0
Просмотров: 1082
Последний ответ 04.10.2014, 18:13:40
от rigin