ParadoX

ParadoX

Don't worry, be hippy
+11
Репутация
11
Рейтинг
#1 [ЕСТЬ РЕШЕНИЕ] Как добавить новый в ICMS2? 28 октября 2017 в 12:26
Ris, благодарю вас за совет! Всё получилось.
Для тех, кто хочет добавить себе тег <gpsies> (актуально для туристов, велосипедистов, мотоциклистов и просто путешественников), вот инструкция:

1. Дублируем html_filter.php, как в предыдущем сообщении от Ris

2. В полученном файле найти (~42 строка):
  1. $jevix->cfgAllowTags(array(
после всех тегов перед )); добавить
  1. , 'gpsies'
Обратите внимание, что после последнего тега не должно быть запятой!

3. Далее найти (~82 строка)
  1. $jevix->cfgAllowTagParams('iframe', array(
далее в этой же строке найти
  1. 'src' => array('#domain'=>array(
перед ним добавить
  1. , 'scrolling' => '#text', 'marginheight' => '#text', 'marginwidth' => '#text',
далее в этой же строке найти
  1. 'youtube.com'
перед ним добавить
  1. 'gpsies.com',
4. Далее найти (~119 строка)
  1. // Отключаем типографирование в определенном теге
  2. $jevix->cfgSetTagNoTypography('pre','youtube', 'iframe'
сразу после добавить
  1. , 'gpsies'
5. Далее найти (~134 строка)
  1. // Ставим колбэк для спойлеров
  2. $jevix->cfgSetTagCallbackFull('spoiler', array($this, 'parseSpoiler'));
после, на следующей строке добавить
  1. // Ставим колбэк для gpsies
  2. $jevix->cfgSetTagCallbackFull('gpsies', array($this, 'parseGpsies'));
6. В самом конце файла перед последней } добавить
  1. // Обработчик html-тега <gpsies>
  2. public function parseGpsies($tag, $params, $content){
  3.  
  4. $video_id = $this->parseGpsiesID(trim(strip_tags($content)));
  5.  
  6. return $this->getGpsiesCode('//www.gpsies.com/mapOnly.do?fileId='.$video_id);
  7.  
  8. }
  9.  
  10. private function getGpsiesCode($src) {
  11. return '<div class="video_wrap"><iframe class="video_frame" src="'.$src.'" frameborder="0" scrolling="no" marginheight="0" marginwidth="0"></iframe></div>';
  12. }
  13.  
  14. private function parseGpsiesID($url) {
  15.  
  16. $pattern = '#^(?:(?:https|http)?://)?(?:www\.)?(?:gpsies\.com(?:/map\.do\?fileId=))([\w-]{16})(?:.+)?$#x';
  17. preg_match($pattern, $url, $matches);
  18. return (isset($matches[1])) ? $matches[1] : false;
  19.  
  20. }
Далее всё ещё раз проверяем, в т.ч. синтаксис и запятые. Ну и на этом всё)
Если вам нужно сделать обработчик для собственного тега, делаем всё по аналогии. Удачи.
#1 [ЕСТЬ РЕШЕНИЕ] Как добавить новый в ICMS2? 27 октября 2017 в 17:41
В системе есть некоторое количество предустановленных HTML-тегов, которые используются в сообщениях и в редакторах, например: <b>, <i>, <youtube>, <spoiler> и др. Но нигде я не нашёл инструкции, как добавить свои.
Вот, например, есть необходимость добавить тег <gpsies> для сервиса gps-треков GPSies.com. Ссылка на страницу трека имеет вид (пример):

  1. https://www.gpsies.com/map.do?fileId=nxphyavinzgopchw
код для страницы соответственно:

  1. <iframe src="//www.gpsies.com/mapOnly.do?fileId=nxphyavinzgopchw" width="600" height="400" frameborder="0" scrolling="no" marginheight="0" marginwidth="0"></iframe>
За обработку тегов отвечает файл типографа system\controllers\typograph\hooks\html_filter.php, но править системные файлы не есть хорошо/правильно. Отсюда вопрос, подскажите, как правильно реализовать свой хук по сабжу? Хорошо бы сделать подробную пошаговую инструкцию. Пригодится многим.
#2 [ЕСТЬ РЕШЕНИЕ] Тестирование компонента Форум 27 октября 2017 в 12:26
И ещё одна фишка очень нужна и будет полезной. У вас выделяются новые (только созданные) темы, а было бы очень удобно (как на многих форумных движках) сделать, чтобы выделялись темы, где появились новые сообщения с последнего просмотра этой темы пользователем. Т.к. для каждого пользователя отслеживается последнее сообщение которое он видел в теме. Так же добавляется ссылка на последнее непрочитанное сообщение темы, кто автор и когда написал (по аналогии с последним сообщением темы), плюс добавляется кнопка в category_view.tpl.php "пометить все темы прочитанными", а в index.tpl.php "пометить все форумы прочитанными".

Так же очень хочется увидеть кнопки перехода на первую и последние 3 страницы многостраничной темы в category_view.tpl.php. Это очень удобно.

Вот пример (названия изменены), красным выделены темы, которые ещё не читал, или в них появились новые сообщения:


Было бы удобнее опцию "Закрепить первое сообщение темы" вынести из настроек форума в настройку темы (в первое сообщение и при создании темы), чтобы можно было выбирать тему, где это нужно (в одних это удобно, в других наоборот).
#3 [ЕСТЬ РЕШЕНИЕ] Тестирование компонента Форум 27 октября 2017 в 12:03
Loadырь, ещё раз моё уважение! Благодарим!

В "моих темах" не везде корректна сортировка по возрастанию/по убыванию (т.е. задом наперёд):
Заголовок — корректно
Дата обновления — некорректно
Число ответов — некорректно
Число просмотров — корректно
#4 [ЕСТЬ РЕШЕНИЕ] Тестирование компонента Форум 26 октября 2017 в 21:31
Loadырь
Ещё один вопрос назрел — хочу сделать чтобы "последние темы" выглядели как "мои темы". Подскажите пожалуйста, на что заменить следующие переменные из my_threads.tpl.php, чтобы работали в latest_threads.tpl.php:
  1. $thread['answers']
  2. $thread['last_post']['post_id']
  3. $thread['last_post']['user_id']
  4. $thread['last_post']['user_nickname']
  5. $thread['last_post']['date_pub']
#5 [ЕСТЬ РЕШЕНИЕ] Тестирование компонента Форум 26 октября 2017 в 18:38
alkokrolik, есть такой глюк, нужно "сохранить порядок" и всё становится на места!

Loadырь, найден баг — при сортировке в "моих темах" (my_threads) по числу ответов выпадает ошибка, что не хватает колонки:

Ошибка в запросе БД:
Unknown column 'i.post_count' in 'order clause'

SELECT i.*
FROM test_forum_threads i
WHERE (i.user_id = '1')
ORDER BY i.post_count desc, i.hits desc
LIMIT 0, 15

Последние вызовы:

cmsModel->get() @ /system\controllers\forum\model.php: 1312
modelForum->getMyThreads() @ /system\controllers\forum\actions\my_threads.php: 28
actionForumMyThreads->run()
call_user_func_array() @ /system\core\controller.php: 453
cmsController->runExternalAction() @ /system\core\controller.php: 371
cmsController->runAction() @ /system\core\core.php: 681
cmsCore->runController() @ /index.php: 40

#6 [ЕСТЬ РЕШЕНИЕ] Тестирование компонента Форум 24 октября 2017 в 10:47

Появился раздел с таким же названием.

alkokrolik
Похоже на повтор предыдущей команды браузером при F5
#7 [ЕСТЬ РЕШЕНИЕ] Тестирование компонента Форум 23 октября 2017 в 14:28
Loadырь, ещё раз огромное вам спасибо! Всё сделал, работает, как надо! smile
Прошу вас обратить внимание на мои прошлые вопросы:

Loadырь, заметил, что в голосовании условие <?php if (isset($thread_poll['is_user_vote'][$answer])){?> не выполняется:

  1. <div class="title<?php if (isset($thread_poll['is_user_vote'][$answer])){?> is_my_answer<?php }?>"><?php echo $answer;?></div>
Как бы поправить? Было бы замечательно подсвечивать собственные ответы вместо "Ваш ответ: Да".

ParadoX

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

ParadoX
#8 [ЕСТЬ РЕШЕНИЕ] Тестирование компонента Форум 22 октября 2017 в 23:15
Loadырь, благодарю вас! Всё получилось!
Но почему тогда по аналогии $user->user_rating рейтинг не выводит?
И как узнать является ли пользователь модератором, чтобы выделить имя? if $is_moder показывает всех модераторами…
#9 [ЕСТЬ РЕШЕНИЕ] Тестирование компонента Форум 22 октября 2017 в 21:48
Loadырь, я пробовал. При добавлении в my_posts.tpl.php или latest_posts.tpl.php переменной $user['forum_old_posts_count'], получаю ошибку 500.
#10 [ЕСТЬ РЕШЕНИЕ] Тестирование компонента Форум 22 октября 2017 в 19:10
Loadырь, в базу текущего проекта на instantcms 2.8.2 в таблицу префикс_users столбец forum_old_posts_count, который уже содержит количество сообщений со старого форума. То есть туда же, где и forum_posts_count вашего форума. Надеюсь так понятно)

Делаете запрос в ту таблицу той базы, для получения количества сообщений и потом сумируете их с тем, что получает сам форум

Loadырь
Если бы знал как, не просил бы о помощи. К сожалению знаний не хватает…
#11 [ЕСТЬ РЕШЕНИЕ] Тестирование компонента Форум 22 октября 2017 в 17:02

Я не знаю структуру бд того форума, поэтому врядли чем-то помогу.

Loadырь
Я же расписал всё:

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

ParadoX
Данные в forum_old_posts_count вносятся мною вручную и в нём уже есть значения. В thread_view.tpl.php всё работает.
#12 [ЕСТЬ РЕШЕНИЕ] Тестирование компонента Форум 22 октября 2017 в 15:47
И как вывести рейтинг пользователя (не сообщения) в my_posts.tpl.php?
#13 [ЕСТЬ РЕШЕНИЕ] Тестирование компонента Форум 22 октября 2017 в 15:34
Уважаемый Loadырь, помогите пожалуйста разобраться!
Есть задача к "количеству сообщений пользователя" прибавлять "количество сообщений пользователя на старом форуме", дабы иметь общее. Я добавляю в базу столбец forum_old_posts_count аналогичный forum_posts_count, в который будет вноситься "количество сообщений пользователя на старом форуме".

Количество сообщений пользователя в thread_view.tpl.php выводится переменной $post['user_forum_posts_count'] и чтобы получить необходимое, я добавляю в model.php строчку
  1. 'u.forum_old_posts_count' => 'user_forum_old_posts_count'
, а в thread_view.tpl.php вывожу количество
  1. <?php $forum_posts_count_total = ($post['user_forum_posts_count'] + $post['user_forum_old_posts_count']);?>
  2. <li><?php echo LANG_FORUM_MESSAGES;?>: <?php echo $forum_posts_count_total;?></li>
Тут всё понятно и работает.

В my_posts.tpl.php же количество выводится переменной $user_post_count, которая, как я понимаю, приходит к нам из \system\controllers\forum\actions\my_posts.php
  1. $user_post_count = $this->model->getUserPostsCount($this->cms_user->id);
а сюда из model.php
  1. public function getUserPostsCount($user_id){
  2.  
  3. $count = $this->filterEqual('user_id', $user_id)->getCount('forum_posts');
  4.  
  5. $this->resetFilters();
  6. return $count;
  7. }
Подскажите пожалуйста, как правильно объединить количество сообщений на старом и новом форумах? Думаю, пригодится не только мне.
#14 [ЕСТЬ РЕШЕНИЕ] Тестирование компонента Форум 22 октября 2017 в 00:06
После удаления сообщения страница не перезагружается и удаляемое сообщение висит, пока вручную не перезагрузишь.
🍪Мы используем файлы cookie для работы сайта. Читать подробнее.