«AttacherFreelance» — Плагин для «сборка «Фриланс-Биржа»». ⭐ С помощью которого можно загружать файлы, изображения, и прикреплять к публикациям основных модулей фриланс-биржи: маркет, проекты, портфолио, услуги
«AttacherFreelance» работает на основе API плагина attacher и является мостиком для взаимодействия с модулями projects (проекты биржи фриланса), market (витрина услуг и магазин цифровых товаров), folio (портфолио фрилансеров).
Для работы плагина требуется установленный плагин «Attacher».
Установка рекомендуется только на чистую сборку, то есть новый сайт.
Не устанавливать наряду с плагинами «Mavatars» и «MAvatars for freelance2» или другими расширениями (плагинами), выполняющими эти функциональные задачи. Конфликты и риски не исключены — всё под свою ответственность!
Attacherfreelance — плагин для фриланс-биржи на Cotonti Siena
Code=attacherfreelance
Name=Attacherfreelance
Category=files-media
Description=Attaching images and files for freelance (projects,market,folio)
Version=1.0.0.beta
Date=2019-01-26
Author=Roffun
Copyright=copyright (c) CmsCot.net, 2019 — TO THIS DAY & ABOVE. All rights reserved.
Notes=BSD License, https://github.com/Roffun/attacherfreelance-plugin-cotonti/blob/master/LICENSE
Requires_plugins=attacher
Установка плагина «AttacherFreelance»
— Скачать архив, распаковать. Переименовать папку с плагином в attacherfreelance. Её нужно разместить в корневой каталог plugins, где все плагины находятся.
(Плагин «AttacherFreelance» уже включен в состав базовой сборки.!!!)
— Перейти в «Управление сайтом / Расширения / Загрузка изображений и файлов фриланс» и установить с помощью интерфейса (плагин attacher уже должен быть установлен).
На этом процесс установки можно считать завершенным.
Остается подключить плагин в шаблонах, — добавить код в соответствующие шаблоны модулей фриланс-биржи скина ваше%D�о сайта.
Модуль projects сборки «Фриланс-Биржа»
Для прикрепления файлов к создаваемому проекту.
пример прикрепления файлов к проекту (заданию)
В projects.add.tpl:
<!-- IF {PHP|cot_auth('plug', 'attacher', 'W')} --> {PHP.L.Files}: {PHP|att_filebox('projects', 0)} <!-- ENDIF -->
Для прикрепления файлов к редактируемому проекту.
В projects.edit.tpl:
<!-- IF {PHP|cot_auth('plug', 'attacher', 'W')} --> {PHP.L.Files}: {PRJEDIT_FORM_ID|att_filebox('projects', $this)} <!-- ENDIF -->
Предпросмотр списка прикрепленных файлов перед публикацией проекта.
В projects.preview.tpl:
<!-- IF {PRJ_ID|att_count('projects',$this)} > 0 --> <div data-att-display="all"> <h3>{PHP.L.att_attachments}</h3> {PRJ_ID|att_display('projects',$this,'','attacher.display','all')} </div> <!-- ENDIF -->
Вывод прикрепленных файлов на странице проекта:
В projects.tpl:
<!-- IF {PRJ_ID|att_count('projects',$this)} > 0 --> <div data-att-display="all"> <h3>{PHP.L.att_attachments}</h3> {PRJ_ID|att_display('projects',$this,'','attacher.display','all')} </div> <!-- ENDIF -->
Вывод изображений в списках (категориях) проектов:
В projects.list.tpl:
<!-- IF {PRJ_ROW_ID|att_count('projects',$this,'','images')} > 0 --> <div> <a href="{PRJ_ROW_URL}" title="{PRJ_ROW_SHORTTITLE}"> <img src="{PRJ_ROW_ID|att_get('projects',$this,'')|att_thumb($this,200,160,'crop',false)}" alt="{PRJ_ROW_SHORTTITLE}"> </a> </div> <!-- ENDIF -->
Вывод изображений в списках проектов на главной:
В projects.index.tpl:
<!-- IF {PRJ_ROW_ID|att_count('projects',$this,'','images')} > 0 --> <div> <a href="{PRJ_ROW_URL}" title="{PRJ_ROW_SHORTTITLE}"> <img src="{PRJ_ROW_ID|att_get('projects',$this,'')|att_thumb($this,200,160,'crop',false)}" alt="{PRJ_ROW_SHORTTITLE}"> </a> </div> <!-- ENDIF -->
Вывод изображений в списках проектов в профиле:
В projects.userdetails.tpl:
<!-- IF {PRJ_ROW_ID|att_count('projects',$this,'','images')} > 0 --> <div> <a href="{PRJ_ROW_URL}" title="{PRJ_ROW_SHORTTITLE}"> <img src="{PRJ_ROW_ID|att_get('projects',$this,'')|att_thumb($this,200,160,'crop',false)}" alt="{PRJ_ROW_SHORTTITLE}"> </a> </div> <!-- ENDIF -->
Вывод формы прикрепления файлов для исполнителя и заказчика в заявках проекта.
В projects.offers.tpl перед:
<!-- BEGIN: PROJECTFORPRO --> <div class="alert alert-warning">{PHP.L.paypro_warning_onlyforpro}</div> <!-- END: PROJECTFORPRO -->
Добавить:
<!-- IF {PHP|cot_auth('plug', 'attacher', 'W')} --> {PHP.item.item_id|att_performer_attach($this,'all',2)} <!-- ENDIF -->
Эта конструкция выведет форму прикрепления файлов, видимую только если:
Назначен исполнитель, статус проекта не реализован. Видят заказчик и исполнитель.
Нет исполнителя, но есть прикрепленные файлы от предыдущего исполнителя (после отказа). Видит заказчик.
Выбран исполнитель, проект отмечен как реализованный. Видит заказчик при наличии файлов.
Так как форма предназначена для прикрепления файлов, видимых только заказчику и исполнителю, они могут оба видеть всё что прикреплено в форму (если условие 1), могут удалять свои файлы, но не могут удалить файлы друг друга. Это подстраховка для обеих сторон.
Админ сайта видит форму и файлы при возникновении любого из перечисленных условий, и имеет права на удаление любого из них. При добавлении конструкции в шаблон темы, второй и третий параметр — это настройка типов файлов и количества, разрешенных для прикрепления. Так как функция att_performer_attach() — это обертка для функции att_filebox(), для более детального понимания параметров 2 и 3 смотрите описание $type, $limit для att_filebox().
p.s. Плагин attacher и attacherfreelance работают по принципу API, и не знают, где в какой момент, какой модуль или плагин их использует. Они лишь выводят форму загрузки или уже загруженное содержимое, ничего не зная о фрилансерах, работодателях, статусах и прочем. Применяют только разрешения указанные для них.
При интеграции в свои расширения нужно самостоятельно позаботиться об этом. В качестве примера такой функции — att_performer_attach(), которая обрабатывает логику вывода формы, но не является частью API. Она анализирует данные на основе переданного параметра, и создает условия для вывода формы att_filebox() по конкретным условиям.
Модуль market freelance
Для прикрепления файлов к добавляемому товару (не самого товара!). Для продажи файлов и цифровых товаров используется плагин для сборки сайта «Фриланс-биржа« — «МаркетОрдерс«.
В шаблон модуля market.add.tpl :
<!-- IF {PHP|cot_auth('plug', 'attacher', 'W')} --> {PHP.L.Files}: {PHP|att_filebox('market', 0)} <!-- ENDIF -->
Для прикрепления файлов к редактируемому товару.
В market.edit.tpl:
<!-- IF {PHP|cot_auth('plug', 'attacher', 'W')} --> {PHP.L.Files}: {PRDEDIT_FORM_ID|att_filebox('market', $this)} <!-- ENDIF -->
Предпросмотр списка прикрепленных файлов перед публикацией товара на витрину.
В market.preview.tpl:
<!-- IF {PRD_ID|att_count('market',$this)} > 0 --> <div data-att-display="all"> <h3>{PHP.L.att_attachments}</h3> {PRD_ID|att_display('market',$this,'','attacher.display','all')} </div> <!-- ENDIF -->
Вывод прикрепленных файлов на странице (карточки) товара:
В market.tpl:
<!-- IF {PRD_ID|att_count('market',$this)} > 0 --> <div data-att-display="all"> <h3>{PHP.L.att_attachments}</h3> {PRD_ID|att_display('market',$this,'','attacher.display','all')} </div> <!-- ENDIF -->
или так
<div class="uk-inline uk-cover-container"> <!-- IF {PRD_ID|att_get('market', $this, '', '', '2')} --> <canvas width="200" height="200"></canvas> <a href="{PRD_ID|att_get('market', $this, '', '', '2')|att_thumb($this, 850, 650, auto)}" data-caption="{PRD_SHORTTITLE} - " title="{PRD_SHORTTITLE}"> <img src="{PRD_ID|att_get('market', $this, '', '', '2')|att_thumb($this, 250, 250, crop)}" alt="" uk-cover></a <!-- ENDIF --> </div>
или так, в шаблоне модуля, через шаблон плагина attacher.display.market.tpl
<div class="uk-container" uk-slider="center: true"> <div class="uk-position-relative uk-visible-toggle uk-light" tabindex="-1"> <div class="uk-slider-items" uk-lightbox> <!-- BEGIN: ATTACHER_ROW --> <div class="uk-width-1-1"> <!-- IF {ATTACHER_ROW_IMG} AND {ATTACHER_ROW_NUM} == 1 --> <a href="{ATTACHER_ROW_URL}" data-caption="{PRD_ROW_SHORTTITLE}{ATTACHER_ROW_TITLE} - {ATTACHER_ROW_FILENAME}" alt="{ATTACHER_ROW_TITLE}"> <img width="640" height="320" src="{ATTACHER_ROW_ID|att_thumb($this,640,420,'crop')}" alt="{ATTACHER_ROW_TITLE} - {ATTACHER_ROW_FILENAME}" title="{ATTACHER_ROW_TITLE} - {ATTACHER_ROW_FILENAME}" /> </a> <!-- ENDIF --> <!-- IF {ATTACHER_ROW_IMG} AND {ATTACHER_ROW_NUM} == 2 --> <a href="{ATTACHER_ROW_URL}" data-caption="{PRD_ROW_SHORTTITLE}{ATTACHER_ROW_TITLE} - {ATTACHER_ROW_FILENAME}" alt="{ATTACHER_ROW_TITLE}"> <img width="640" height="320" src="{ATTACHER_ROW_ID|att_thumb($this,640,420,'crop')}" alt="{ATTACHER_ROW_TITLE} - {ATTACHER_ROW_FILENAME}" title="{ATTACHER_ROW_TITLE} - {ATTACHER_ROW_FILENAME}" /> </a> <!-- ENDIF --> <!-- IF {ATTACHER_ROW_IMG} AND {ATTACHER_ROW_NUM} == 3 --> <a href="{ATTACHER_ROW_URL}" data-caption="{PRD_ROW_SHORTTITLE}{ATTACHER_ROW_TITLE} - {ATTACHER_ROW_FILENAME}" alt="{ATTACHER_ROW_TITLE}"> <img width="640" height="320" src="{ATTACHER_ROW_ID|att_thumb($this,640,420,'crop')}" alt="{ATTACHER_ROW_TITLE} - {ATTACHER_ROW_FILENAME}" title="{ATTACHER_ROW_TITLE} - {ATTACHER_ROW_FILENAME}" /> </a> <!-- ENDIF --> </div> <!-- END: ATTACHER_ROW --> </div> <a class="uk-position-center-left uk-position-small uk-hidden-hover" href="#" uk-slidenav-previous uk-slider-item="previous"></a> <a class="uk-position-center-right uk-position-small uk-hidden-hover" href="#" uk-slidenav-next uk-slider-item="next"></a> </div> <ul class="uk-slider-nav uk-dotnav uk-flex-center uk-margin"></ul> </div>
Вывод изображений в списках (категориях) товаров:
В market.list.tpl:
<!-- IF {PRD_ROW_ID|att_count('market',$this,'','images')} > 0 --> <div> <a href="{PRD_ROW_URL}" title="{PRD_ROW_SHORTTITLE}"> <img src="{PRD_ROW_ID|att_get('market',$this,'')|att_thumb($this,200,160,'crop',false)}" alt="{PRD_ROW_SHORTTITLE}"> </a> </div> <!-- ENDIF -->
Вывод изображений в списках товаров на главной:
В market.index.tpl:
<!-- IF {PRD_ROW_ID|att_count('market',$this,'','images')} > 0 --> <div> <a href="{PRD_ROW_URL}" title="{PRD_ROW_SHORTTITLE}"> <img src="{PRD_ROW_ID|att_get('market',$this,'')|att_thumb($this,200,160,'crop',false)}" alt="{PRD_ROW_SHORTTITLE}"> </a> </div> <!-- ENDIF -->
Вывод изображений в списках товаров в профиле:
В market.userdetails.tpl:
<!-- IF {PRD_ROW_ID|att_count('market',$this,'','images')} > 0 --> <div> <a href="{PRD_ROW_URL}" title="{PRD_ROW_SHORTTITLE}"> <img src="{PRD_ROW_ID|att_get('market',$this,'')|att_thumb($this,200,160,'crop',false)}" alt="{PRD_ROW_SHORTTITLE}"> </a> </div> <!-- ENDIF -->
Модуль folio freelance
Для прикрепления файлов при добавлении работы в портфолио:
В folio.add.tpl:
<!-- IF {PHP|cot_auth('plug', 'attacher', 'W')} --> <tr> <td>{PHP.L.Files}:</td> <td> {PHP|att_filebox('folio', 0)} </td> </tr> <!-- ENDIF -->
Для прикрепления файлов к редактируемой работе в портфолио.
В folio.edit.tpl:
<!-- IF {PHP|cot_auth('plug', 'attacher', 'W')} --> <tr> <td>{PHP.L.Files}:</td> <td> {PRDEDIT_FORM_ID|att_filebox('folio', $this)} </td> </tr> <!-- ENDIF -->
Предпросмотр списка прикрепленных файлов перед публикацией работы в портфолио.
В folio.preview.tpl:
<!-- IF {PRD_ID|att_count('folio',$this)} > 0 --> <div data-att-display="all"> <h3>{PHP.L.att_attachments}</h3> {PRD_ID|att_display('folio',$this,'','attacher.display','all')} </div> <!-- ENDIF -->
Вывод прикрепленных файлов на странице работы в портфолио:
В folio.tpl:
<!-- IF {PRD_ID|att_count('folio',$this)} > 0 --> <div data-att-display="all"> <h3>{PHP.L.att_attachments}</h3> {PRD_ID|att_display('folio',$this,'','attacher.display','all')} </div> <!-- ENDIF -->
Вывод изображений в списках (категориях) работ портфолио:
В folio.list.tpl:
<!-- IF {PRD_ROW_ID|att_count('folio',$this,'','images')} > 0 --> <div> <a href="{PRD_ROW_URL}" title="{PRD_ROW_SHORTTITLE}"> <img src="{PRD_ROW_ID|att_get('folio',$this,'')|att_thumb($this,200,160,'crop',false)}" alt="{PRD_ROW_SHORTTITLE}"> </a> </div> <!-- ENDIF -->
Вывод изображений в списках работ портфолио на главной:
В folio.index.tpl:
<!-- IF {PRD_ROW_ID|att_count('folio',$this,'','images')} > 0 --> <div> <a href="{PRD_ROW_URL}" title="{PRD_ROW_SHORTTITLE}"> <img src="{PRD_ROW_ID|att_get('folio',$this,'')|att_thumb($this,200,160,'crop',false)}" alt="{PRD_ROW_SHORTTITLE}"> </a> </div> <!-- ENDIF -->
Вывод изображений в списках работ портфолио в профиле:
В folio.userdetails.tpl:
<!-- IF {PRD_ROW_ID|att_count('folio',$this,'','images')} > 0 --> <div> <a href="{PRD_ROW_URL}" title="{PRD_ROW_SHORTTITLE}"> <img src="{PRD_ROW_ID|att_get('folio',$this,'')|att_thumb($this,200,160,'crop',false)}" alt="{PRD_ROW_SHORTTITLE}"> </a> </div> <!-- ENDIF -->
Представленный в данной статье код для интеграции функционала в шаблоны модулей сборки фриланс-биржи является рабочим примером.
Варианты интеграции кода этим не исчерпываются и дополнительно могут зависить от используемых CSS, JS, HTML библиотек и компонетов. Плагин attacherfreelance служит лишь мостиком между расширениями сборки модулей и плагинов сайта биржи фриланса и API плагина attacher, с помощью которого и работают вышеприведенные примеры. Поэтому смотрите документацию и примеры по функциям плагина.
Файлы и медиа: «Attacherfreelance — плагин Cotonti»
Если вам была полезна эта информация, будьте добры, поделитесь ею в социальных сетях. Это послужит дополнительным мотиватором, стимулом к дальнейшим публикациям на сайте автора — cmscot.net статей на интересующие вас темы.
скачать плагин
Вопросы, заметки и свои замечания можно оставить в форме комментариев ниже.
Уведомление: «Attacher» ⭐ плагин для Cotonti. Файлы и медиа