Forums / National / Russian / Модули и плагины / Расширение модуля "Опросы"

Sergeich
#1 2024-03-13 14:01

Первое и главное :) - предлагаю встроить возможность прикреплять опросы к страницам. Это значительно расширит возможности создания статей и общую интерактивность сайта. Кроме того, опросы можно будет комментировать (как на форуме). Собственно, просто продублировать функционал форумных опросов на модуль "Page".

Второе - встроить поддержку разного отображения опросов (полоски, колонки, бублик и т.п). Заложить в модуль 3-4 варианта представления и дать возможность при создании опроса выбрать желаемый вид. Это, конечно, свистоперделка, но прикольная и полезная для формления статей.

This post was edited by Sergeich (2024-03-13 16:24, 1 month ago)
Kort
#2 2024-03-13 14:58

Из сделанных тобой сайтов, которые худо-бедно работают сейчас, на скольких реально потребовалось иметь опросы с бубликами или другими свистоперделками красивыми вариантами представления их результатов?

Мы только вычистили ядро от вышеуказанных свистоперделок. Зачем их обратно пихать? Сделай aux-плагин для опросов и выводи результаты красиво.

Плагином поделись, и все будут в профите)

SED.by - создание сайтов, разработка плагинов и тем для Котонти
Sergeich
#3 2024-03-13 15:22

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

Я не умею в плагины, так бы сделал :)

Dayver
#4 2024-03-14 04:46

К первому и самому главному, как Kort уже успел заметить, стоит не предлагать встроить такую возможность, а предложить сделать соответсвующий плагин (но это так цепляние к терминологии). Поскольку за всё время выработалась концепция очистить движок\коробку от редко используемых вещей и реализовывать всё хотелки юзеров по средствам отдельных расширений то наверное стоит как то систематизировать и оформить возможность делать такие запросы. Или ветку форума создать (если такой еще нет, а если есть направлять такие топики туда) с идеями для будущих плагинов или сделать маркер в гитхабе аля "plugin request" и направлять эти идею туда с таким маркером.

По сути и по первому и по второму подобные плагины не сложно сделать .... сложно найти человека для их создания потому что из тех что есть тут сложно будет дождатся готового решения из-за нехватки времени. Ну разве что будет доказана большая польза для широкого использования подобных идей что бы сделать создание таких плагинов более приоритетным чем задачи по движку. А то как то последнее время все усилия тех кто здесь что то делает касаются движка а новые расширения создаются не часто. Хотя возможно просто много уже где то когда то реализовано а может просто новые хотелки очень узко специализированы

Pavlo Tkachenko aka Dayver
Sergeich
#5 2024-03-14 06:24

Dayver, так я не предлагаю новых фич. Я предлагаю старую фичу привести к общему знаменателю. Допустим у нас блог, без форума, ибо нафиг он блогу нужен. Я, как владелец, хочу сделать опрос и добавить к нему описание (как на форуме), но этой возможности нет, максимум я дам ссылку на опрос, который создам где-то в дебрях админки. Но, если я обычный юзер (без админских полномочий), который хочет создать статью с опросом, - я просто иду нафиг.

На мой взгляд, это непродуманое искусственное ограничение уже сущетвующей функции.

Kopusha
#6 2024-03-14 07:18

Ой, я как то это все реализовал на стандартном модуле Polls + Page, без перделок экстраполем и версткой. Гляну как и поделюсь. Беда что я далеко от компа нынче, немножко занят тем что на аватарке.

Added 38 minutes later:

Собственно не без перделок вышло)

Тут в архиве дописанные файлики к модулю Polls

Далее в page.add.tpl можно либо привязать экстраполем уже созданный где то опрос указав его id либо прямо на этапе редактирования или создания page создать новы опрос

Нужно по идее из ссылки выше добавить в polls/inc/functions недостающие функции и в корень модуля - 5 файлов, обновить модуль. А код для page.add.tpl сейчас попробую тут кинуть.

 

Added 1 minute later:

page.tpl (просмотр страницы)

<!-- IF {PAGE_ATTACH_POLL} -->
{PAGE_ATTACH_POLL|cot_poll_single($this)}
<!-- ENDIF -->	
	
<!-- BEGIN: POLLS_VIEW -->
<div class="bg-white thepoll-100 unselectable mb-20" style="border-radius: 6px;padding: 20px 30px 20px 20px;">
<h3 class="category text-dark fw-400 fs-16 mb-10">
<i class="fas fa-poll fs-23 opacity09 text-bluer mr-5"></i>
{POLLS_TITLE}
</h3>
<hr>
{POLLS_FORM}
</div>
<!-- END: POLLS_VIEW -->

 

Added 3 minutes later:

page.add.tpl

Создание опроса

<!-- IF {PHP.usr.profile.user_maingrp} == 6 OR {PHP.usr.profile.user_maingrp} == 5 -->
	<div class="row pb-0">
		<div class="col-12">
			<div class="mb-20 mt-20">
			<a href="#collapsePoll" data-toggle="collapse" data-loading-text="loading" aria-expanded="false" aria-controls="collapsePoll" id="collapsePollToggle" style="border-color: transparent;background: rgba(158,158,158,.2);" class="mdl-button fs-15 pointer mr-10 unselectable"><i class="ico-category et-bargraph mr-10"></i>{PHP.L.addpoll}</a>
			</span>
			</div>			
		</div>
	</div>

<div class="thepoll bg-white collapse unselectable" style="border-radius: 6px;padding: 20px 50px 20px 20px;" id="collapsePoll">
<!-- BEGIN: POLL -->
<div class="table">
	<div class="row pt-30 pb-20">
		<div class="col-md-2 col-lg-2">
		<label class="form-control-label text-bluer pt-12 fw-400">{PHP.L.pollquest}: </label>
		</div>
		<div class="col-md-10 col-lg-10 fullwidth">
		{EDIT_POLL_IDFIELD}
		{EDIT_POLL_TEXT|cot_rc_modify($this, 'autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" class="form-control new-form fullwidth firstcapital"')}
		</div>
	</div>
							<script type="text/javascript" src="{PHP.cfg.modules_dir}/polls/js/polls.js"></script>
							<script type="text/javascript">
								var ansMax = {PHP.cfg.polls.max_options_polls};
							</script>
							
	<div class="row pt-0 pb-0">
		<div class="col-md-3 col-lg-2">
		<label class="form-control-label text-bluer pt-12 fw-400">{PHP.L.pollansw}: </label>
		</div>
		<div class="col-12 fullwidth">
		</div>
	</div>
<!-- BEGIN: OPTIONS -->
	<div class="row pt-0 pb-0 polloptiondiv">
		<div class="col-md-12 col-lg-10 col-xl-9 fullwidth">
		{EDIT_POLL_OPTION_TEXT|cot_rc_modify($this, 'autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" class="form-control new-form fullwidth firstcapital" style="width: calc(100% - 50px) !important;"')}
		<i name="deloption" type="button" class="las la-times fs-21 pointer deloption" style="display:none;border: none !important;position: absolute;top: 13px;right: 25px;"></i>
		</div>
	</div>
<!-- END: OPTIONS -->
<div class="row pb-0">
		<div class="col-12 unselectable">
		{EDIT_POLL_MULTIPLE}
		</div>
</div>

	<br>
	<input id="addoption" name="addoption" style="display:none" class="btn btn-success btn-sm" value="{PHP.L.Add}" type="button" />
	
</div>	
<!-- END: POLL -->
</div>
<!-- ENDIF -->	

Привязывание ранее созданного опроса

		<label class="form-control-label text-bluer pt-6 fw-400">{PHP.L.attach_poll_title}: </label>
		</div>
		<div class="col-md-9 col-lg-10 startday shortdate" style="max-width: 300px;">
		{PAGEADD_FORM_ATTACH_POLL|cot_rc_modify($this, 'style="max-width: 100px;" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" class="form-control new-form"')}
		</div>

PAGEADD_FORM_ATTACH_POLL видимо просто экстраполе для page.

 

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

Added 1 minute later:

PS что интересно - можно добавлять к стр сразу 2 опроса - один напрямую а второй "общий" созданный в модуле Опросы. Такая тогда стояла задача.

This post was edited by Kopusha (2024-03-14 08:03, 1 month ago)
Dayver
#7 2024-03-14 08:03
#47871 Sergeich:

Но, если я обычный юзер (без админских полномочий), который хочет создать статью с опросом, - я просто иду нафиг.

На мой взгляд, это непродуманое искусственное ограничение уже сущетвующей функции.

Суть вашей задачи я прекрасно понимаю и согласен что это недоработка (про новые фичи это было скорее организационной отступление как поступать в будущем в подобных ситуация когда предлагается создание нового функционала которое лежит исключительно в разрезе реализации посредством расширения) и в вашем конкретном сценарии использования сайта это весьма нужный плагин был бы.

Но тогда стратегически, обращаясь к команде, предлагаю обсудить вопрос несколько шире. Поскольку уже не один год развитие движка идет путём оформления функциональности по средствам АПИ ядер то логично было бы запланировать из модуля Опросов вынести функционал опросов в форумах в отдельный плагин и на равне с этим создать аналогичный плагин для Страниц. Тогда модуль опросов это АПИ ядро а плагины это наделение других модулей этой функциональностью. Логика проста, если на сайте нужны опросы но не нужны форумы или этот функционал в только например в страницах то вебмастер оставлят только модуль, а если нужно точнечно добавить в тот или иной раздел сайта то будут отдельный плагины под каждый.

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

Pavlo Tkachenko aka Dayver
Kopusha
#8 2024-03-14 08:08

Паш - я насколько помню (это года 3 назад было) все заняло у меня минут 20 чисто для одной хотелки быстро накидать код для пейдж - что я выше и показал +- как. Там же 1 функцию дописал и пару файлов клонировал, через жопу но работает. Более мне ни разу не нужно было такое. Думаю это очень редкая хотелка и есть поважнее что пилить.

Sergeich
#9 2024-03-14 13:42

Kopusha, спасибо.

Поскольку уже не один год развитие движка идет путём оформления функциональности по средствам АПИ ядер то логично было бы запланировать из модуля Опросов вынести функционал опросов в форумах в отдельный плагин и на равне с этим создать аналогичный плагин для Страниц. Тогда модуль опросов это АПИ ядро а плагины это наделение других модулей этой функциональностью.

Dayver, это самое разумное решение.

 

Alex300
#10 2024-03-14 14:16

Поскольку уже не один год развитие движка идет путём оформления функциональности по средствам АПИ ядер то логично было бы запланировать из модуля Опросов вынести функционал опросов в форумах в отдельный плагин и на равне с этим создать аналогичный плагин для Страниц. Тогда модуль опросов это АПИ ядро а плагины это наделение других модулей этой функциональностью.

Или так: сделать функцию - виджет, которая по аналогии с комментариями (вроде) или модулем файлов умеет привязываться к любой сущности по source/source_id в выводит опрос

// Для страниц
{PHP|cot_pollWidget('page', {PAGE_ID})}

// Для форума
{PHP|cot_pollWidget('forums', {FORUM_TOPIC_ID})}

// Для любого расширения
{PHP|cot_pollWidget('another_source', {ANOTHER_ID})}

Правда это любое расширение при удалении своей сущности (страницы/товара/проекта) должно уметь удалить привязанный к ним опрос, вызвав

 cot_pollDelete('another_source', $id);

За страницами и форумом сможет следить и сам модуль Polls. Зато добавление опросов, скажем к товарам в магазине, сведется к созданию обрабочика хука (плагина) удаления этого товара и добавления одной строчки в шаблоны редактирования и отображения этого товара.

Есть миры, не здесь, там, где небеса горят, и моря засыпают, и реки дремлют; люди сделаны из дыма, а города – из песен. Где-то опасность, где-то несправедливость, даже где-то остыл чай. Идем Эйс, у нас много работы!...
...Sorry for my english...
Бесплатные расширения для Cotonti: https://lily-software.com/free-scripts/