Виджет "Случайная запись"

+27
3.42K
Здравствуйте!

Иллюстрация

Сегодня я хочу представить небольшой виджет для InstantCMS 2.x который может выводить в случайном порядке указанный в настройках тип контента. Это был мой первый виджет разработанный для новой CMS, особо наблюдательные люди могли его заметить в видео о Таблице картинок. За основу был взят стандартный виджет вывода контента + добавлена возможность смены записи через аякс, при нажатии кнопки "Обновить".


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

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

Установка стандартная для второй ветки Инстанта.

Скачать: randomWidget.install.zip
Зеркало: randomWidget.install.zip
-1
Алексей Т Алексей Т 7 лет назад #
Информативно и доступно раскрыл все прелести незамысловатого виджета+
0
СергейП СергейП 7 лет назад #
Плюсую v smile
+1
Слава Слава 7 лет назад #
Спасибо!
Виджет хороший, но настройки немного устарели.
+2
Val Val 7 лет назад #
Спасибо, учту. Вместе с будущими пожеланиями исправлю)))
+1
lokanaft lokanaft 7 лет назад #
Наверно более удобно будет, если индикация загрузки будет вместо кнопки, дабы и контент не скакал, и на кнопку по сто раз не жали.
+1
Val Val 7 лет назад #
Очень интересная и полезная мысль!
+1
reload reload 7 лет назад #
Val, по улучшению: настраивать кол-во материалов для отображения,.. в общем сделать типа копию виджета "список контента", только с рандомным выводом!)

И есть вопрос - у меня чет не хочет выводить дефлотные виды контента) но те виды, которые создал сам - выводит)
шаб дефлотный, двиг с обновлением до 2.1.1 - проблем не у кого нет?)
+1
Val Val 7 лет назад #
reload, непонятно почему у вас не работает с дефолтными типами контента. Я его тестировал только на дефолтном, точнее даже на новостях (news).
А по количеству материалов - интересная идея! В принципе, уже достаточно мыслей прозвучало о доработке. Как появится свободное время, сяду воплощать.
0
Brut Brut 7 лет назад #
Странно, кроме страниц в виджете больше ничего не отображается, ни новости ни статьи ни объявления и т.д. А так +
0
reload reload 7 лет назад #
Brut:
Странно, кроме страниц в виджете больше ничего не отображается, ни новости ни статьи ни объявления и т.д. А так +

Val, оказывается я не одинок!)
Brut, у вас отображается то что вывели первым? или методом тыка смотрели где заработает?)
0
Brut Brut 7 лет назад #
Проверял по очереди, страницы, объявления, фото, и так далее...
0
reload reload 7 лет назад #
Val, кстати я страницы не проверял (спасибо Brut) - оказывается выводит только страницы из дефлотных данных и виды которые сам создал...
0
reload reload 7 лет назад #
Вывел два виджета на странице
- в одном созданный вид контента "Раздельчик"
- в другом дефлотный "Страницы"

При открытии страницы отображают как и задумано

При "обновлении" любого виджета по клику на кнопку "обновить"
- в оба блока загружается одинаковая информация!) то что в первом отобразиться то и во втором будет (
не зависимо на каком виджете нажимать на обновление...
0
Слава Слава 7 лет назад #
Это проблема с ява-скриптом. Я сделал дату как на сайте, "2 дня назад". Но после нажатия на кнопку, дата стала вновь 28.03.2014.
+1
Val Val 7 лет назад #
Да есть такая проблема, нужно дополнительно идентифицировать в какой виджет грузить аякс данные... Реализую в обновлении.
Так, а при установке одного виджета данные грузятся или нет (имеется ввиду для любого типа контента)?
0
reload reload 7 лет назад #
Val:
а при установке одного виджета данные грузятся или нет (имеется ввиду для любого типа контента)?
У меня работает только с дефлотным контентом "страницы" и с самостоятельно созданными видами...
При установке в настройках дефлотных видов "новости, блоги, статьи...." виджет тупо не появляется на странице)

как то странно, не понимаю чем вид "страницы" может отличаться от "новостей" и моим созданным "раздельчик")

повторю что проверял не на чистой установке, а на обновленной до 2.1.1
+2
Val Val 7 лет назад #
у меня тоже обновление, но я проверял только с типом контента Новости. Прочешу код, может что найду, тогда отпишусь...
0
SE7EN SE7EN 7 лет назад #
Если страницу обновлять то иногда появляется NULL, а есл обновлять сам виджет то в кратком описании не не режутся теги. Как исправить?
+1
Val Val 7 лет назад #
Про null надо разбираться, возможно что-то связанное с задержкой ответа сервера scratch
А с тегами спасибо за дельное замечание, в следующей версии исправлю! А пока можно подправить в ручную, для этого нужно в файле шаблона random.tpl.php подправить 31-ую строку:
Код PHP:
  1. <?php if ($teaser_field) { ?>
  2. <div class="rnd_teaser">
  3. <?php if (!empty($item[$teaser_field])) { echo html_clean($item[$teaser_field]); } ?>
  4. </div>
  5. <?php } ?>
0
SE7EN SE7EN 7 лет назад #
код заменил, но теги все равно показываются, но только тогда когда нажимаю обновить в виджете, если просто обновляю страницу то всё ОК.
+2
Val Val 7 лет назад #
Вчера был не мой день)))
Еще надо для обработки аякс запроса обернуть вывод тизера:
Код PHP:
  1. ...
  2. $result = array(
  3. 'error' => false,
  4. 'id' => $item_id,
  5. 'url' => href_to($ctype_name, $item['slug']) . '.html', //ссылка на контент
  6. 'image' => html_image($item[$image_field], big), // ссылка на картинку (возвращает тег img)
  7. 'title' => htmlspecialchars($item['title']), //текст заголовка
  8. 'teaser' => html_clean($item[$teaser_field]) //текст тизера
  9. 'url_author' => href_to('users', $item['user']['id']),
  10. ...
меняем в файле system\controllers\content\actions\item_random.php
+1
Александр Александр 7 лет назад #
А такого чудо модуля для первой ветки не будет?

P.S. очень интересная идея +
+1
Val Val 7 лет назад #
К сожалению пока что не планировал делать, но возможно если будет достаточно свободного времени...
0
Sergon Sergon 7 лет назад #
Val, я поставил на 2.2.1 и не работает random, можно что-то сделать? спасибо!
+2
Val Val 7 лет назад #
Спасибо. Посмотрю в чем может быть причина.
0
Pawell Pawell 4 года назад #
Здравствуйте. А можно ли как то настроить, чтобы изображение бралось из двух полей?
Я создал новое поле для вставки изображений. Надо, чтобы фотографии выводились либо из старого поля, либо из нового.
Или может как то можно прописать в $image_field = $this->request->get('image_field'); два поля?
0
Val Val 4 года назад #
попробуйте вместо
Код PHP:
  1. $image_field = $this->request->get('image_field');
вставить:
Код PHP:
  1. $image_field = mt_rand(0, 1) ? 'field1_name' : 'field2_name';
где 'field1_name' и 'field2_name' соответственно системные имена первого и второго поля.
0
Pawell Pawell 4 года назад #
Заменил код:
Код PHP:
  1. $image_field = mt_rand(0, 1) ? 'photo' : 'foto';
в файле widget.php и item_random. php. После очистки кэшей изображения стали появляться безсистемно, то есть порой отображаются, а порой не отображаются из обоих полей.
0
Val Val 4 года назад #
В переменную $image_field ранее приходило системное имя поля с изображением. Сейчас системное имя случайно выбирается между 'photo' и 'foto'. Как вы и просили:
Pawell:
Надо, чтобы фотографии выводились либо из старого поля, либо из нового.

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

В этом случае попробуйте исправить строку так:
Код PHP:
  1. $image_field = !empty($item['photo']) ? 'photo' : 'foto';
0
Pawell Pawell 4 года назад #
У меня в любом случае есть фотография в одном из полей. Вставив этот код изображение берётся только из нового поля foto. Оставив изначальный код только из старого photo.
0
Val Val 4 года назад #
Pawell:
У меня в любом случае есть фотография в одном из полей.
Как и сказал в прошлом сообщении из-за этого не сработал самый первый вариант.

Pawell:
Вставив этот код изображение берётся только из нового поля foto.
Тут я поспешил smile Переменная $item еще не определена и не существует, поэтому !empty($item['photo']) всегда будет false, оттого в качестве имени поля всегда берётся второй вариант 'foto'.

Закомментируйте 17 и замените 118 строку в файле ..\system\controllers\content\actions\item_random.php на следующее:
Код PHP:
  1. $items[$key]['image'] = !empty($item['photo']) ? html_image($item['photo'], 'big') : !empty($item['foto']) ? html_image($item['foto'], 'big') : '';
0
Pawell Pawell 4 года назад #
Закомментировал строку:
Код PHP:
  1. #$image_field = $this->request->get('image_field');
Вставил это:
Код PHP:
  1. $items[$key]['image'] = !empty($item['photo']) ? html_image($item['photo'], 'big') : !empty($item['foto']) ? html_image($item['foto'], 'big') : '';
Вместо этого:
Код PHP:
  1. $items[$key]['image'] = !empty($image_field) ? html_image($item[$image_field], 'big') : ''; // ссылка на картинку (возвращает тег img)
Но этот код находился в строке №93, 118 строки вообще нет. Всего 117.
Скачивал обновление http://instantcms.ru/blogs/bitblog/vidzhet-sluchainaja-zapis-eshe-odno-obnovlenie.html виджета, так как в файле \system\controllers\content\actions\item_random.php в этой теме всего 64 строки.
В результате после всех приведённых выше манипуляций берётся изображение только из нового поля foto, из старого photo - нет.
0
Pawell Pawell 4 года назад #
При первой загрузке сайта фотографии выводятся, после нажатия кнопки обновить исчезают, а затем после нескольких десятков нажатий на обновление появляются изображения из нового поля foto.
+1
Val Val 4 года назад #
скобочки добавьте:
Код PHP:
  1. $items[$key]['image'] = !empty($item['photo']) ? html_image($item['photo'], 'big') : ( !empty($item['foto']) ? html_image($item['foto'], 'big') : '' );
Pawell:
Но этот код находился в строке №93, 118 строки вообще нет. Всего 117.
да, все верно строка 93. Смотрел файл у себя на локалке, а в нем есть много закомментированного кода, который я удалял из релизной версии.
0
Pawell Pawell 4 года назад #
Всё работает. Спасибо.
0
ermakover ermakover 2 года назад #
Поставил виджет на сайт, всё отлично работает. Автору респект и уважуха. И плюс в карму. Но вот у меня не работает автообновление. У всех так же или опять у меня только не работает?
0
RSN RSN 2 года назад #
Но вот у меня не работает автообновление.

Он без автообновления насколько знаю, обновляется при обновлении страницы.
Для этого кнопка "Обновить" и стоит.

Кстати разработчик обещал (по наличию времени) обновить немного по функционалу виджет...
+1
Val Val 2 года назад #
В настройках можно установить кол-во секунд при котором будет автоматически "нажиматься" кнопка обновления)))

P.S. функционал немного доработал, надо как-то вам скинуть виджет чтобы вы могли детальнее потестить?
0
RSN RSN 2 года назад #
надо как-то вам скинуть виджет чтобы вы могли детальнее потестить?

Буду ждать.
+1
Val Val 2 года назад #
Автообновление должно работать. Посмотрите в консоли браузера есть ли какие ошибки? Возможно есть какие либо конфликты со сторонними скриптами.
Если не разберётесь, пишите в личку, починим эту проблему))
0
ermakover ermakover 2 года назад #
В консоли ошибок нет. Ставил различные значения автообновления, но не срабатывает. Напишу Вам в личку.
0
Евгений Фоменко Евгений Фоменко 1 год назад #
Привет всем!
Помогите плиз с новой версией - при попытке сохранить виджет пишет "Указано недопустимое значение". Версия 2.14.1

Val, если есть возможность помочь - буду рад. Очень нравится этот виджет.
+1
Zau4man Zau4man 1 год назад #
Попробуйте заменить файлом из архива (предварительно скопировав куда-то оригинальный файл) /users/files/download7945.html
файл system/controllers/content/widgets/random/options.form.php

Должно помочь.
Если не помогло, верните старый файл обратно.

Еще от автора

СтопХам - userscript для instantcms.ru
Всем привет! Презентую чужую разработку со своей небольшой доработкой .
Предпросмотр для InstantCMS 2
Всем привет!
Just4Fun - Аватарки!
Здравствуйте, любители InstantCMS 2.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.