Ris

Ris

+657
Репутация
3771
Рейтинг
#1 Плеер на странице 10 мая 2017 в 14:36
Capitan,
Сгенерировать html например этим:
www.whsh4u.com/HTML5-Player.php
И вставить этот код куда нужно. Либо прямо в шаблон, либо в виджет текст HTML.
#2 Плеер на странице 10 мая 2017 в 11:59
Не думал, что кому-то пригодится после этого, но попробуйте вот это:
instantcms.ru/blogs/zapiski-dinozavra/audiopler-dlja-kontenta.html
#3 Наборы в связях типов контента 6 мая 2017 в 18:34

а вот в списке связанного контента они не работают!

SergeySheff
Уточните пожалуйста, что такое "список связанного контента"?
#4 как сделать рандомную подгрузку записей в виджете? 5 мая 2017 в 12:44
Вот такой вот хук замечательно рандомит посты.
  1. <?php
  2.  
  3. class onContentContentPostsListFilter extends cmsAction {
  4.  
  5. public function run($data){
  6.  
  7. list($ctype, $model) = $data; // Разворачиваем массив входящих данных
  8.  
  9. $model->order_by = 'rand()';
  10.  
  11.  
  12. return array($ctype, $model);
  13. }
  14.  
  15. }
#5 Как заставить работать rating_widget из хука? 4 мая 2017 в 23:08
Fuze,
Включил оба хука. В первом выбираю список контента, во втором подменяю рейтинг.
Если сделать так:

1 хук — нужная сортировка, $ctype['is_rating'] = 0
2 хук формирование виджета рейтинга, $ctype['is_rating'] = 1

Fuze
получаю Notice: Undefined index: rating_widget in ...
Если убрать отключение-включение рейтинга — голосование работает четко, но у первого контента в спике виджет рейтинга пустой и количество запросов sql возрастает с 28-ми до 42-х… Ведь рейтинг на подмену не от балды берется, а приходится повторить те же операции, что и в первом виджете.
Все же это довольно запутанный и многоступенчатый метод.
Попробую всё же найти способ просто отправить в шаблон виджета $is_first_widget = true;

В общем убился, но так ничего путного и не придумал.
Нарисовал в \templates\default\controllers\rating\widget.tpl.php
  1. <?php if ($is_first_widget || substr($_SERVER['REQUEST_URI'], 0, 16) == '/мой_датасет' )
Костыль, конечно, но в шаблоне и так пришлось многое допилить.
Fuze, Loadырь, огромное спасибо за помощь!
Теперь понял, как и что.
Но всё равно создатель яваскрипта — явно недобрый человек… smile
#6 Как заставить работать rating_widget из хука? 4 мая 2017 в 21:45

Тогда попробуйте в первом хуке, где фильтр, выключать рейтинг ($ctype['is_rating'] = 0;), во втором включать ($ctype['is_rating'] = 1;). Должно получиться.

Fuze
Я первый хук фильтра совсем выключил. Во втрором хуке content_{$ctype['name']}_before_list формируется модель и из нее новый список контента:
  1. $this->model->filterIn("id", $newcom)->order_by = "FIELD(i.id, $newstr)";
  2. $items = $this->model->getContentItems($ctype['name']);
Потом туда виджеты рейтинга засовываются:
  1. // Рейтинг
  2. if ($ctype['is_rating'] && $items && $this->isControllerEnabled('rating')){
  3.  
  4. $rating_controller = cmsCore::getController('rating', new cmsRequest(array(
  5. 'target_controller' => $this->name,
  6. 'target_subject' => $ctype['name']
  7. ), cmsRequest::CTX_INTERNAL));
  8.  
  9. $is_rating_allowed = cmsUser::isAllowed($ctype['name'], 'rate');
  10. $is_first_widget = true;
  11.  
  12. foreach($items as $id=>$item){
  13. $is_rating_enabled = $is_rating_allowed && ($item['user_id'] != $this->cms_user->id);
  14. $items[$id]['rating_widget'] = $rating_controller->getWidget($item['id'], $item['rating'], $is_rating_enabled);
  15. }
  16.  
  17. }

<script>
$(function(){
icms.rating.setOptions({url: "'.href_to('rating', 'vote').'"});
});
</script>

Fuze
Uncaught ReferenceError: $ is not defined
#7 Как заставить работать rating_widget из хука? 4 мая 2017 в 21:34

Тогда я не понял что вы делаете в хуке content_{$ctype['name']}_before_list. Хук вызывается, когда виджеты рейтинга сформированы.

Fuze
Приходится формировать новые виджеты. Прямо в хуке. С нужными значениями рейтинга.
Ведь список заново получается из модели без виджетов рейтинга.
#8 Как бороться с дублем /content/имяраздела ? 4 мая 2017 в 21:19
Sonat,
Теперь понял.
Это фишка такая. Ведь новости в первой ветке — категория статей.
Может редиректами как-то? В htaccess. Чтобы с /content/stati отправляло на /stati

Только что проверил. С /content/stati автоматом отфутболивает на /stati
#9 Как заставить работать rating_widget из хука? 4 мая 2017 в 21:09

2. В вашем хуке сделать что-то вроде:

Fuze
Не работает.
$this->cms_template->addJS('templates/default/js/rating.js')
не ругается, но тоже не работает.
Пробовал вне кода php писать
  1. <script>icms.rating.setOptions({url: "'.href_to('rating', 'vote').'"});</script>
ругается в консоли Uncaught ReferenceError: icms is not defined

1. Текущий HTML виджета реплейсить, меняя что вам нужно.

Fuze
А это как?

3. В вашем хуке content_{$ctype['name']}_list_filter сделайте значение $ctype['is_rating'] в 0 или false. Пожалуй этот вариант самый лучший.

Fuze
Виджет рейтинга пропал. shock

Уже отработал ранее, т.е. указанный скрипт подключился и все попытки его подключения вновь возвращают false, которое и записывается в $is_first_widget.

Fuze
А нельзя ли его как-то отключить, чтобы он потом подключился?
Или $is_first_widget = true в шаблон отправить принудительно?
#10 Как заставить работать rating_widget из хука? 4 мая 2017 в 20:59

Вероятно в вашем хуке нет подключения яваскрипта

Loadырь
Пробовал.
class 'content' does not have a method 'addJS'
#11 Как бороться с дублем /content/имяраздела ? 4 мая 2017 в 20:43

проверил — действительно все разделы имеют такие дубли.

Sonat
Не понял. Разные разделы с одинаковым url?
#1 Как заставить работать rating_widget из хука? 4 мая 2017 в 20:36
Понадобилось мне выводить датасеты контента отсортированные специальным образом.
С этим отлично справляется хук content_list_filter.php
И, казалось бы, всё хорошо, но рейтинг у выведенных материалов отличается от того, что нужен. В результате разборки с пользователями, мол почему мой материал имеет рейтинг выше, а первый не он. И каждый раз объяснения про то, что за вчерашний и другие дни рейтинг в зачет не идет и т.д.
Впихнуть изменения рейтинга в модель не представляется возможным, поэтому решил использовать хук content_{$ctype['name']}_before_list.
Прямо в хуке формирую модель для датасета, там же получаю массив контента, там же получаю рейтинг. Выводится всё замечательно, но… голосование в виджете рейтинга не работает. После нажатия на голосовалку индикатор загрузки зависает навсегда.
Вставлял console.log в rating.js и понял, что почему-то нет значения url: '/rating/vote'
Аякс просто не знает кому звонить.
Значение это формируется в конце файла \templates\default\controllers\rating\widget.tpl.php
  1. <?php if ($is_first_widget) { ?>
  2. <script>
  3. icms.rating.setOptions({
  4. url: '<?php echo $this->href_to('vote'); ?>'
  5. });
  6. </script>
  7. <?php }?>
А в начале этого же файла написано:
  1. <?php $is_first_widget = $this->addJS('templates/default/js/rating.js'); ?>
И почему-то это не срабатывает.
Если отменить проверку $is_first_widget например так:
  1. <?php if (1==1) { ?>
  2. <script>
  3. icms.rating.setOptions({
  4. url: '<?php echo $this->href_to('vote'); ?>'
  5. });
  6. </script>
  7. <?php }?>
всё сразу прекрасно работает.

Пробовал уже в разных местах хука писать $is_first_widget == 1 или == true — бесполезно.
Кто поможет в беде?
#12 [ЕСТЬ РЕШЕНИЕ] Тестирование мигратора INSTANTCMS1.1.* - INSTANTCMS2.7.1 4 мая 2017 в 12:18
kirkr,
Делать надо последнюю версию. smile
Много разных нюансов уже нашел, надо все это допилить и выложить.
#13 Сайт недоступен некоторым рондомным пользователям. 2 мая 2017 в 12:19
@Aliaksandr
Нужно писать письмо в техподдержку хостера. Они разберутся.
#14 Прокрутка как в соцсетях (фейсбуке) 1 мая 2017 в 00:50
Я делал такую штуку на сайте с первой веткой. Причем фиксились два сайдбара правый и левый.
И тут же получил от юзеров массу жалоб. Во всех браузерах это ведет себя по-разному.
В хроме неприятно дергаются фиксированные сайдбары, а на айпэдах и вовсе буквы наползают друг на друга.
Пришлось отключить.
🍪Мы используем файлы cookie для работы сайта. Читать подробнее.