Новости Joomla

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

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Создание папок из фронтенда
« Ответ #300 : 01.11.2015, 21:55:05 »
Цитировать
$user =& JFactory:: getUser();
это вам не нужно, так как нужный юзер у вас уже имеется, он передан вам через параметр $user
 
Цитировать
if ($isnew)
{
return true; ....здесь мы говорим, что если это новый пользователь....
}
     
if ($success)
{
return true;  ....и сохранение данных прошло успешно....
}
неправильно, правильно так:
Код
if (!$isnew || !$success) // если это не новый пользователь и/или сохранение данных произошло неудачно
    return false;             // завершаем работу, ибо далее делать нечего
     
Цитировать
$db = JFactory::getDbo();          ....то мы делаем запрос к базе данных....
$query = $db->getQuery(true)
а тут вы должны делать запрос на вставку данных, т.е. запрс типа $query->insert...
вот только я не вижу в таблице сборников поля-ссылки на пользователя, к которому привязывается сборник




если честно, я практически не понимаю структуры данных, вы используете стандартные материалы и стандартные категории? а дополнительно какие еще таблицы созданы? опишите их полную структуру, какое поле за что отвечает, ибо не понимая этого, мне крайне сложно что-либо вам советовать.
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #301 : 01.11.2015, 22:26:19 »
AlekVolsk, мы сейчас первым делом пошли смотреть нашу таблицу сборников.
Вот она:
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #302 : 01.11.2015, 22:36:13 »
Структура данных такая:

1. Таблица сборников chmos_compilations (эту таблицу создавали мы)
Поля таблицы:
Спойлер
[свернуть]

2. Таблица для связи материалов и сборников chmos_compilations_articles (эту таблицу создавали мы)
Поля таблицы:
Спойлер
[свернуть]
3. Таблица материалов content (эта стандартная джумловская таблица, мы её не трогали)
Поля таблицы:
Спойлер
[свернуть]
« Последнее редактирование: 01.11.2015, 22:41:08 от mila_serdnaya »
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #303 : 01.11.2015, 22:46:41 »
А категории в нашем компоненте никак не задействованы.
------------------------------------------------------------
Суть компонента такая: зарегистрированный пользователь создаёт сборники (во фронтенде) и может помещать в них свои материалы.
То есть задействованы всего три таблицы:
1. Таблица сборников
2. Таблица для связи материала со сборником
3. Таблица материалов

Как-то так...
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #304 : 01.11.2015, 23:50:32 »
Вот ещё скрин наших таблиц:
1. Таблица сборников chmos_compilations
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #305 : 01.11.2015, 23:59:59 »
2. Таблица для связи материалов и сборников chmos_compilations_articles
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #306 : 02.11.2015, 00:02:23 »
3. Таблица материалов content
Скрины этой таблицы не приводим, потому что она стандартная у всех.
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Создание папок из фронтенда
« Ответ #307 : 02.11.2015, 00:26:58 »
Ок, немного яснее стало.

Значит, в плагине при регистрации юзера вы делаете запрос на вставку данных примерно следующего вида:

Код: php
$db = JFactory::getDbo();
$query = $db->getQuery(true);
 
$columns = array(
    'title',
    'state',
    'created_time',
    'checked_out',
    'checked_out_time',
    'created_by',
    'is_sys'
);
 
$values = array(
    $db->quote('Материалы вне сборников'), /* наименование сборника, лучше всего задайте для него именованную языковую константу и прописывайте здесь через JText::_() */
    1, /* сборник доступен */
    $query->currentTimestamp(), /* будет записана дата и время добавления этой записи в БД, по сути - не более чем на 1 секунду позже времени регистрации пользователя */
    0, /* не знаю, что означает поле checked_out */
    $db->quote('0000-00-00 00:00:00'), /* не знаю, что означает поле checked_out_time */
    $user->id, /* id пользователя, полученное из объекта, переданного в функцию при вызове плагина */
   1 /* тот самый показатель того, что данный сборник - системный и пользователь им управлять не может */
);
 
$query->insert($db->quoteName('#__chmos_compilations'))
    ->columns($db->quoteName($columns))
    ->values(implode(',', $values));
 
$db->setQuery($query)->execute();
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Создание папок из фронтенда
« Ответ #308 : 02.11.2015, 00:32:35 »
Теперь, при добавлении материала без сборника вы запросом получаете для конкретного пользователя id его системного сборника и прописываете в таблицу связей id этого системного сборника, а при получении списка сборников и материалов в модели вы можете построить запрос таким образом, чтобы возвращались только те материалы, что имеют связь со сборниками.
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Создание папок из фронтенда
« Ответ #309 : 02.11.2015, 00:45:15 »
Отступлюсь от темы похоливарить чуток (сори) и объясню, почему плохо использовать оригинальные материалы J.

1) все равно не используется штатная таблица категорий - она заменяется таблицей сборников, т.е. половина данных уже хранится и обрабатывается не стандартным функционалом
2) приходится использовать дополнительную таблицу связей для связи сборников и материалов - при хранении материалов в таблице своего компонента она не нужна
3) поскольку вы не можете изменять стандартный компонент материалов под свои нужды напрямую, вам приходится писать дополнительные планины управления, а это всегда дополнительная нагрузка на систему, особенно, если плагин на события компонента материалов (пусть незначительная, но нагрузка от плагинов есть всегда, по сути - это своеобразный костыль, позволяющий внешнее управление компонентом)
4) необходимость использования материалов не только в комплекте со сборниками порождает необходимость логического разделения, что влечет необходимость разработки дополнительного функционала и хранения данных и их последующую обработку
5) вам вряд ли нужны все свойства стандартного материала, но при этом вам могут понадобится для них дополнительные поля, которые вы можете реализовать как с помощью сторонних средств (miniCCK для примера) так и в своем компоненте, что только усложняет запросы к базе при обработке этих данных.
6) вам все равно придется писать свой роутер для своего компонента, при этом учитывать постоянно изменяющийся и довольно глючный роутер компонента материалов
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #310 : 02.11.2015, 01:09:38 »
AlekVolsk, сейчас мы собираем плагин... увидели Ваше последнее сообщение - точнее, прочитали первый пункт - и сразу начали Вам писать это сообщение.
Мы не ещё не знаем, что Вы написали в других пунктах, но одно точно: категории мы у себя используем. Пользователь, когда создаёт материал, помещает его в одну из категорий. А также он этот же материал помещает в один из сборников, если он создан.
Вот скрин, чтобы было более понятно:
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Создание папок из фронтенда
« Ответ #311 : 02.11.2015, 01:15:50 »
Что же, пусть так, мне не известна полная структура задуманного, тут вам виднее :)
Но при выборке материалов и сборников вам наверняка придется учитывать и это тоже, запрос усложняется ))
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #312 : 02.11.2015, 01:21:44 »
Скажите, пожалуйста, мы правильно понимаем, что наш плагин (мы назвали его chmosplugbez) будет состоять из следующих файлов:
1. chmosplugbez.php
Спойлер
[свернуть]

2. chmosplugbez.xml
Спойлер
[свернуть]

3. script.php - мы, если честно, не поняли, что это за скрипт. Он был создан автоматически, когда мы создавали каркас плагина с помощью сервиса по автоматическому созданию плагина автора Istaan
Спойлер
[свернуть]

4. Папка language, в которой находятся ini-файлы плагина
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #313 : 02.11.2015, 01:25:18 »
Цитировать
Что же, пусть так, мне не известна полная структура задуманного, тут вам виднее Azn
Но при выборке материалов и сборников вам наверняка придется учитывать и это тоже, запрос усложняется ))

AlekVolsk, нам нравится Ваше чувство юмора. =)
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Создание папок из фронтенда
« Ответ #314 : 02.11.2015, 01:29:04 »
В целом да, по идее все правильно, устанавливайте, проверяйте ))
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #315 : 02.11.2015, 01:35:27 »
Странно....Первый раз сталкиваемся с тем, что не можем найти наш плагин...Мы открыли менеджер расширений, усатновили наш зазипованный плагин (plg_chmosplugbez.zip), появилось сообщение о том, что "установка плагина успешно завершена".
Мы переходим в "Управление" - а нашего плагина нигде нет... мы его не можем найти, чтобы активировать....Он ведь должен там быть, по идее?
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #316 : 02.11.2015, 01:36:56 »
Отбой! Раньше времени наводим панику! В менеджере плагинов всё есть!
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #317 : 02.11.2015, 01:43:46 »
AlekVolsk, мы пошли тестировать наш chmosplugbez, который должен автоматически заносить материал в системный сборник "Без сборника", если пользователь не решил иначе.
Так вот, мы пошли создавать материал
- название: "Пробный материал"
- текст материала: "Этот материал должен автоматически попадать в системный сборник "Без сборника"".
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Создание папок из фронтенда
« Ответ #318 : 02.11.2015, 01:46:13 »
Этот материал пока еще не должен автоматически попадать в сборник "материалы без сборника", для этого вы пока еще не откорректировали должным образом плагин сохранеия нового материала.

Создайте нового пользователя, можно прямо в админке - для него должен создаться ваш системный сборник
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #319 : 02.11.2015, 01:46:41 »
Перешли на вкладку публикация. Там всё оставили без изменений.
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #320 : 02.11.2015, 01:48:45 »
Уже допишем.... Нажали на "сохранить" и вылезла ошибка.
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #321 : 02.11.2015, 01:50:08 »
Создаём нового пользователя в админке...
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #322 : 02.11.2015, 01:55:47 »
Не удаётся. Пишет ошибку. Вот она:
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Создание папок из фронтенда
« Ответ #323 : 02.11.2015, 01:59:27 »
покажите код плагина, с параметром заголовка сборника явно проблема
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #324 : 02.11.2015, 02:01:54 »
Вот, chmosplugbez.php:
Спойлер
[свернуть]
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Создание папок из фронтенда
« Ответ #325 : 02.11.2015, 02:07:38 »
мои комментарии, кстати, можете убрать, если они вам более не нужны ))

кавычки не там
Цитировать
$db->quote('JText::_(Materials_without_the_compilation)'),
=>
Код
$db->quote(JText::_('Materials_without_the_compilation')),

замените
Цитировать
if (!$isnew || !$success)
      return false;
=>
Код
if (!$isnew)
return false;
if (!$success)
return false;

закомментируйте весь код добавления запроса и добавьте проверку вывода $user:
Код
print_r('<pre>');
print_r($user);
print_r('</pre>');
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #326 : 02.11.2015, 02:16:50 »
Исправили код, согласно Вашим замечаниям.
Вот он:

Спойлер
[свернуть]

Не уверены, правда, что правильно добавили проверку вывода $user...
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Создание папок из фронтенда
« Ответ #327 : 02.11.2015, 02:20:05 »
что теперь выводится при сохранении нового пользователя?
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #328 : 02.11.2015, 02:22:54 »
Та же ошибка.
Вот скрин:
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Создание папок из фронтенда
« Ответ #329 : 02.11.2015, 02:31:42 »
попробуйте изменить так
Код: php
<?php

defined( '_JEXEC' ) or die;

class plgUserChmosplugbez extends JPlugin
{

public function onUserAfterSave($user, $isnew, $success, $msg)
{
if (!$isnew)
return false;
if (!$success)
return false;

$userid = JArrayHelper::getValue($user, 'id', 0, 'int');

$db = JFactory::getDbo();
$query = $db->getQuery(true);
 
$columns = array(
'title',
'state',
'created_time',
'checked_out',
'checked_out_time',
'created_by',
'is_sys'
);
 
$values = array(
$db->quote(JText::_('Materials_without_the_compilation')),
1,
$query->currentTimestamp(),
0,
$db->quote('0000-00-00 00:00:00'),
$userid,
1
);
 
$query->insert($db->quoteName('#__chmos_compilations'))
->columns($db->quoteName($columns))
->values(implode(',', $values));
 
$db->setQuery($query)->execute();

}

}

?>
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Создание релиза компонента средствами GitHub

Автор SkyAn

Ответов: 4
Просмотров: 725
Последний ответ 01.11.2019, 17:42:04
от Septdir
[Решено] Создание контент плагина

Автор IvanTopor

Ответов: 4
Просмотров: 1255
Последний ответ 26.02.2016, 13:10:37
от IvanTopor
Создание динамических полей в своем компоненте

Автор NeuroZ

Ответов: 14
Просмотров: 1464
Последний ответ 18.08.2015, 11:17:59
от b2z
Создание таблиц средствами компонента

Автор spirit1086

Ответов: 3
Просмотров: 1043
Последний ответ 18.08.2015, 10:17:09
от spirit1086
Создание изображений PHP и GD

Автор vita1971

Ответов: 6
Просмотров: 927
Последний ответ 10.05.2015, 13:10:38
от vita1971