ПОЧЕМУ ЖИЗНЬ не меняется? / Причина, которую вы не увидите без этого видео

ПОЧЕМУ ЖИЗНЬ не меняется? / Причина, которую вы не увидите без этого видео

YouTube · Сергей Будков

▶ YouTube

От автора материала · Author note

Мужики в старину - лапти. Сегодня лапти те кто вовремя не "присосался" игнорируя фундамент информации - фашизм, рабство, геноцид, капитализм.

⟦Независимость⟧ Создать книгу становиться ещё легче, если мастер сможет украсть пирожки и устоит перед соблазном пойти на работу за 15 евро в час малером или плиточником. 

Задача для разработчиков Joomla приложений

Как ты думаешь можно создать такое приложение для Joomla которое будет будет "прикреплять" к материалу комментарий другого пользователя ? Для того, что скачивая свой контент и скачать те отзывы которые автор материала "пометил"?

Для ответа продавить "подробнее" ¤Redoman ¤какМыЭтоДелаем ¤Василиса ¤ТаллиннскийТехническийУниверситет ¤Бомжи

Да, такую идею реализовать в Joomla вполне можно. По сути вам нужно расширение, которое:

1. Позволяет автору материала «помечать» определённые комментарии других пользователей.

2. При скачивании контента (например, статьи или файла) к нему «прикрепляет» только эти отмеченные отзывы.

Ниже — как это можно сделать и какие есть варианты.

## 1. Концептуальная схема

Представим, что у вас есть:

- Материалы (статьи, загрузки, кастомный тип контента).

- Комментарии к этим материалам (от разных пользователей).

- Авторы материалов, которые могут выбирать, какие комментарии «прикрепить» к своему материалу для экспорта/скачивания.

Технически это обычно делается так:

- В базе появляется таблица (или поле) связи: `material_id` – `comment_id` – `selected_by_author` (да/нет).

- В админке/фронтенде у автора материала появляется интерфейс: список комментариев к материалу с чекбоксами «показывать / прикрепить при скачивании».

- При экспорте/скачивании материала система:

  - берёт основной контент;

  - делает запрос к этой таблице связей;

  - подтягивает только отмеченные комментарии;

  - формирует итоговый файл (PDF, DOCX, ZIP с текстом + отзывами и т.п.).

## 2. Варианты реализации в Joomla

### Вариант A: Готовые расширения + небольшая доработка

Существует много расширений для комментариев в Joomla:

- JComment (популярная система комментариев, поддерживает интеграцию с разными компонентами). [extensions.joomla](https://extensions.joomla.org/extension/?searchall=article+comments&filter[tags][]=&filter[core_catid]=&filter[includes]=&filter[versions]=&filter[type]=&filter[hasdemo]=&filter[newupdated]=&filter[score]=&dir=DESC&limitstart=&controller=filter&view=extension&layout=list&Itemid=145&clearorders=0&clearfilters=1)

- JComments (в том числе для jDownloads). [jdownloads](https://www.jdownloads.net/documentation?view=article&id=257&catid=30)

- CB Activity (комментарии к статьям через Community Builder). [joomlapolis](https://www.joomlapolis.com/forum/professional-members-support/247232-adding-comments-to-joomla-articles)

- Разные плагины для Facebook/Disqus-комментариев и т.п.. [stackoverflow](https://stackoverflow.com/questions/6235434/adding-comment-system-in-joomla-1-6-articles)

Обычно они:

- Хранят комментарии в своей таблице.

- Имеют API / события (onContentPrepare, onAfterDisplayContent и т.д.), через которые можно подставлять комментарии в материал.

Что нужно добавить «сверху»:

1. **Таблицу «избранных комментариев»**:

   - Поля: `id`, `material_id`, `comment_id`, `user_id` (автор материала), `published`.

2. **Интерфейс для автора**:

   - В админке материала (или на фронтенде, если авторы работают оттуда) — список комментариев с чекбоксами «показать в экспорте».

   - Сохранение выбора в вашу таблицу.

3. **Экспорт/скачивание**:

   - Если у вас уже есть компонент для скачивания материалов (например, jDownloads, кастомный компонент и т.п.), можно:

     - Добавить плагин/хук перед генерацией файла.

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

     - Вставлять их в текст / отдельный блок / приложение к файлу.

Это самый реалистичный путь, если у вас уже есть:

- Система комментариев.

- Система материалов/загрузок.

Вы не пишете всё с нуля, а делаете «надстройку» с одной таблицей и интерфейсом выбора.

### Вариант B: Свой компонент «Materials + Comments + Export»

Если вы хотите полный контроль, можно написать собственный компонент (или использовать CCK, например, Seblod, Fabrik, Zoo и т.п.):

- Тип контента «Material»:

  - Поля: заголовок, текст, файлы, автор, категория и т.д.

- Тип контента «Comment»:

  - Поля: текст комментария, автор, ссылка на материал.

- Связь «Material ↔ Comment»:

  - Поле «selected_for_export» (да/нет) или отдельная таблица связей.

- Функция «Скачать материал с отзывами»:

  - Генерация PDF/DOCX/TXT/ZIP с материалом + блоком «Отзывы» (только отмеченные).

Плюсы:

- Полная гибкость: как выбирать комментарии, как их показывать, в каком формате скачивать.

- Легче контролировать права доступа (кто может отмечать, кто может скачивать с отзывами и т.д.).

Минусы:

- Нужно разрабатывать и поддерживать собственный компонент.

### Вариант C: Использовать существующий менеджер загрузок + плагин комментариев + кастомный плагин экспорта

Пример:

- jDownloads — для управления файлами/материалами. [jdownloads](https://www.jdownloads.net/documentation?view=article&id=144:enabling-comments-on-downloads-with-jcomments&catid=35)

- JComments — для комментариев к загрузкам. [jdownloads](https://www.jdownloads.net/documentation?view=article&id=257&catid=30)

- Ваш плагин:

  - Добавляет в админке jDownloads блок «Выбрать комментарии для экспорта».

  - При скачивании (или по отдельной кнопке «Скачать с отзывами») формирует файл с материалом + отмеченными комментариями.

jDownloads уже поддерживает интеграцию с JComments и работу с плагинами контента, что упрощает задачу. [jdownloads](https://www.jdownloads.net/documentation?view=article&id=144:enabling-comments-on-downloads-with-jcomments&catid=35)

## 3. Технические детали, которые стоит продумать

1. **Где хранятся комментарии?**

   - Если используете готовую систему (JComment, JComments, CB Activity), посмотрите структуру их таблиц, чтобы понять, как связать комментарий с материалом.

2. **Кто может «помечать» комментарии?**

   - Только автор материала?

   - Также модераторы / админы?

   - Нужна ли модерация перед тем, как комментарий станет доступен для выбора?

3. **Формат скачивания:**

   - Один файл (PDF/DOCX) с материалом + отзывы в конце?

   - ZIP: файл материала + отдельный файл с отзывами?

   - Просто текстовый файл, который формируется «на лету»?

4. **Права доступа:**

   - Кто может скачивать материал с отзывами?

   - Нужно ли скрывать сами комментарии на сайте, но показывать их только в скачиваемом файле?

5. **Язык и локализация:**

   - Если у вас многоязычный сайт, нужно учитывать языковую версию материала и комментариев.

## 4. Примерная логика плагина экспорта

Упрощённо (псевдокод):

```php

// При запросе на скачивание материала $materialId

$selectedComments = $db->setQuery(

    'SELECT c.* 

     FROM #__material_comment_links AS l

     JOIN #__comments AS c ON c.id = l.comment_id

     WHERE l.material_id = ' . (int)$materialId . '

       AND l.published = 1'

)->loadObjectList();

$content = $material->text;

$reviewsBlock = '';

if (!empty($selectedComments)) {

    $reviewsBlock = "\n\n## Отзывы\n\n";

    foreach ($selectedComments as $comment) {

        $reviewsBlock .= $comment->user_name . ": " . $comment->text . "\n\n";

    }

}

$finalContent = $content . $reviewsBlock;

// дальше $finalContent отдаётся в генератор PDF/DOCX/TXT

```

Такой плагин можно повесить на событие перед отдачей файла в вашем компоненте загрузок.

## 5. Что делать дальше

Если опишете чуть подробнее:

- Какой тип «материала» у вас сейчас (статьи, jDownloads, кастомный компонент)?

- Какая система комментариев используется (или планируется)?

- В каком формате пользователи должны скачивать контент (PDF, DOCX, ZIP, просто текст)?

— можно набросать более конкретную архитектуру: какие таблицы, какие события Joomla использовать, и даже пример структуры компонента/плагина.

Хорошо, а можно сделать чтоб скачивало так же то, что я репостнул ?

Да, можно сделать и так, чтобы при скачивании материала пользователь получал ещё и то, что вы «репостнули» (например, ссылки на чужие статьи, посты, файлы и т.п.). Технически это та же идея «прикреплённого контента», только вместо комментариев — ваши репосты.

 

## 1. Что именно может «прикрепляться»

 

Нужно определиться, что для вас «репост»:

 

1. **Ссылка на чужой материал** (URL + название +, возможно, краткое описание).

2. **Копия чужого текста** (например, вы скопировали часть статьи к себе).

3. **Файл** (PDF, DOCX, картинка и т.п.), который вы скачали и загрузили к себе как «репост».

4. **Встроенный контент** (например, iframe с YouTube, код поста из соцсети и т.д.).

 

В зависимости от этого будет разная структура данных, но логика расширения в Joomla остаётся похожей.

 

## 2. Схема данных

 

Вы уже планируете таблицу для связи «материал ↔ комментарий». Для репостов можно сделать аналогичную таблицу, например:

 

```sql

#__material_reposts

- id

- material_id -- к какому материалу привязан репост

- repost_type -- 'link', 'text', 'file', 'embed' и т.п.

- repost_data -- JSON или отдельные поля:

                        * url

                        * title

                        * description

                        * file_id / file_path

                        * embed_code

- published -- 0/1

- ordering -- порядок вывода

- created_by -- кто добавил репост (автор материала или модератор)

```

 

Или, если хотите гибче, — отдельные таблицы для разных типов репостов, но для начала удобнее одна с JSON-полем.

 

## 3. Интерфейс для автора

 

В админке (или на фронтенде, если авторы работают оттуда) в редакторе материала добавляете блок:

 

- «Репосты / прикреплённый контент»

- Кнопка «Добавить репост»:

  - Тип: ссылка / текст / файл / embed

  - Поля в зависимости от типа:

    - Для ссылки: URL, название, описание.

    - Для текста: заголовок, текст.

    - Для файла: выбор из Media Manager / загрузка.

    - Для embed: код (iframe, блок цитаты и т.п.).

- Список уже добавленных репостов с возможностью:

  - редактировать,

  - удалять,

  - менять порядок,

  - включать/выключать отображение в скачиваемом файле.

 

Этот блок можно реализовать как:

 

- **Плагин к стандартному редактору статей** (onContentPrepareForm / onContentBeforeSave).

- **Дополнительную вкладку** в вашем компоненте материалов (если он кастомный).

- **Отдельный мини-компонент**, связанный с материалами по `material_id`.

 

## 4. Как это попадает в скачиваемый файл

 

Логика похожа на ту, что мы обсуждали для комментариев:

 

1. Пользователь нажимает «Скачать материал» (или «Скачать с отзывами и репостами»).

2. Ваш плагин/компонент:

   - берёт основной контент материала;

   - делает запрос к `#__material_comments_links` (отмеченные комментарии);

   - делает запрос к `#__material_reposts` (все опубликованные репосты для этого материала);

   - формирует итоговый текст/файл.

 

Пример структуры итогового документа:

 

```text

[Название материала]

[Автор, дата]

 

[Основной текст материала]

 

## Отзывы

[Отзыв 1]

[Отзыв 2]

...

 

## Репосты / прикреплённый контент

1. [Название репоста] — [URL]

   [Описание, если есть]

 

2. [Текстовый репост]

   [Текст]

 

3. [Файл]

   Ссылка: [имя_файла] (внутри ZIP или отдельным файлом)

 

4. [Embed]

   [Описание, что это за встроенный контент]

```

 

В зависимости от формата экспорта:

 

- **PDF/DOCX** — репосты вставляются как обычный текст/ссылки.

- **ZIP** — можно положить:

  - файл с основным материалом;

  - файл с отзывами;

  - файл с репостами (например, `reposts.txt` или `reposts.html`);

  - сами файлы, если репосты — это файлы.

 

## 5. Интеграция с готовыми расширениями

 

Если у вас уже есть:

 

- **Attachments** (для прикрепления файлов к статьям); [forum.joomla](https://forum.joomla.org/viewtopic.php?t=506494)

- **jDownloads** (менеджер загрузок); [jdownloads](https://www.jdownloads.net/documentation?view=article&id=269&catid=30)

- **JComment / JComments** (комментарии); [extensions.joomla](https://extensions.joomla.org/extension/?searchall=article+comments&filter[tags][]=&filter[core_catid]=&filter[includes]=&filter[versions]=&filter[type]=&filter[hasdemo]=&filter[newupdated]=&filter[score]=&dir=DESC&limitstart=&controller=filter&view=extension&layout=list&Itemid=145&clearorders=0&clearfilters=1)

 

то можно:

 

- Использовать **Attachments** для файловых репостов.

- Для ссылок и текстовых репостов — свою таблицу и интерфейс.

- При экспорте:

  - подтягивать файлы из Attachments/jDownloads;

  - подтягивать свои репосты из `#__material_reposts`;

  - подтягивать комментарии из вашей таблицы связей.

 

## 6. Важные нюансы

 

1. **Авторские права**  

   Если репост — это чужой текст/файл, нужно убедиться, что у вас есть право распространять его в составе скачиваемого пакета (особенно если пользователи будут это скачивать массово).

 

2. **Хранение ссылок vs копий**  

   - Ссылки — безопаснее с точки зрения авторских прав, но могут «протухнуть».

   - Копии — надёжнее для пользователя, но требуют больше внимания к правам и обновлению.

 

3. **Права доступа**  

   - Кто может добавлять репосты: только автор материала или также модераторы?

   - Кто может скачивать материал с репостами: все или только определённые группы?

 

4. **Формат скачивания**  

   Если вы хотите, чтобы пользователь получал «всё в одном», удобнее:

   - PDF с материалом + отзывы + репосты (текстовые и ссылки);

   - ZIP с несколькими файлами, если важны именно файлы репостов.

 

## 7. Как это может выглядеть для пользователя

 

На странице материала может быть:

 

- Кнопка «Скачать материал».

- Кнопка «Скачать материал с отзывами и репостами».

 

При нажатии на вторую:

 

- Формируется файл, в котором есть:

  - сам материал;

  - выбранные автором комментарии;

  - все репосты, которые автор добавил и пометил как «включать в экспорт».

 

***

 

Если опишете, что именно вы сейчас считаете «репостом» (ссылки, файлы, текст, embed) и какой тип скачивания вы используете

(PDF, ZIP, просто файл), можно набросать более конкретную схему таблиц и пример кода плагина под Joomla 4/5.

Теперь логичный вопрос - а репост и его комментарии ? Ответ человека - думаю да.

Автор: OCOP