Ris

Ris

+657
Репутация
3771
Рейтинг
#1 Как записать Unicode-символы в mysql 5 февраля 2016 в 18:39
SpAyN,
Мне вот что интересно: в этой теме Вы смогли выложить на форум все эти символы, а содержимое постов записывается именно в базу.
Почему база этого сайта принимает юникодовые символы, а база вашего — нет?

Проверка

"🎁", "♦", "📌", "▼", "🐾", "✔", "🏆", "📢", "⌚", "⭐", "😃", "🎧", "🎤", "📷", "🔥", "🏻", "➰", "💡", "▶", "❤", "🍀", "🌎", "💰", "🤘", "🔋", "🎶", "😳", "⬇"

Мистика! Ни один из моих сайтов эти крякозябры не ест, а тут — пожалуйста!
Вот как выглядят эти крючки при редактировании:

#1 Как вывести количество комментариев в FAQ ? 3 февраля 2016 в 23:35
Есть в ICMS1 такой компонент "Вопросы и ответы". И комментарии к вопросам можно писать, а вот количества комментариев к вопросу посмотреть нельзя, пока не откроешь вопрос.
Сами вопросы отдельно из базы не выбираются, формируется сразу вся страница категории, поэтому количество комментариев к каждому вопросу понятными средствами вычислить довольно затруднительно.

Сейчас у меня это сделано через цикл:

  1. FOR($e=0;$e<=$rows-1;$e++)
  2. {
  3. $sql = "SELECT * FROM cms_comments WHERE target = 'anec' AND target_id = ".$quests[$e]['id'].";";
  4. $result = $inDB->query($sql) ;
  5. $rows2 = $inDB->num_rows($result);
  6. $quests[$e]['comments_vote']=$rows2;
  7. }
Но я думаю, что устраивать запросы в базу в цикле по 40 раз на странице не очень кошерно. Поэтому есть мысль подсчитать количество комментариев к каждому вопросу прямо при выборке вопросов из базы при формировании страницы с категорией.
Но возникло некоторое затруднение. При поиске в лефтджойненой таблице с каментами вывод самих вопросов начинает дублироваться. Сколько у вопроса каментов — столько сделает дублей вопроса.
  1. $sql = "SELECT q.*, c.title cat_title, c.id cid, u.login, u.nickname, r.item_id rid, m.id comm
  2. FROM cms_anec_quests q
  3. LEFT JOIN cms_faq_cats c ON c.id = q.category_id
  4. LEFT JOIN cms_comments m ON m.target_id = q.id AND m.target = 'faq'
  5. LEFT JOIN cms_ratings r ON r.item_id = q.id AND r.target = 'quest' AND r.user_id = {$inUser->id}
  6. LEFT JOIN cms_users u ON u.id = q.user_id WHERE q.published = 1
  7. ORDER BY q.pubdate DESC
  8. LIMIT 15";
Пробовал по-другому :
  1. $sql = "SELECT q.*, c.title cat_title, c.id cid, u.login, u.nickname, r.item_id rid, COUNT(m.id) comm
  2. FROM cms_anec_quests q
  3. LEFT JOIN cms_faq_cats c ON c.id = q.category_id
  4. LEFT JOIN cms_comments m ON m.target_id = q.id AND m.target = 'faq'
  5. LEFT JOIN cms_ratings r ON r.item_id = q.id AND r.target = 'quest' AND r.user_id = {$inUser->id}
  6. LEFT JOIN cms_users u ON u.id = q.user_id WHERE q.published = 1
  7. ORDER BY q.pubdate DESC
  8. LIMIT 15";
Тогда оно 5 минут вертит электронами и выдает на страницу один, самый первый вопрос и количество каментов к нему 360000 с лишним...
То есть запрос вытряхивает все каменты к вопросам из базы.

Может кто подскажет, как организовать вывод счетчика по правильному?

____________________________________________________________

В общем, заработало с GROUP BY

  1. $sql = "SELECT q.*, c.title cat_title, c.id cid, u.login, u.nickname, COUNT(m.target_id) comm
  2. FROM cms_faq_quests q
  3. LEFT JOIN cms_faq_cats c ON c.id = q.category_id
  4. LEFT JOIN cms_users u ON u.id = q.user_id
  5. LEFT JOIN cms_comments m ON m.target_id = q.id
  6. WHERE q.published = 1
  7. GROUP BY m.target_id
  8. ORDER BY q.pubdate DESC
  9. LIMIT ".(($page-1)*$perpage).", $perpage";
Но оооочень долго. 24 секунды думает.
Видимо придется оставить цикл…
#2 [ЕСТЬ РЕШЕНИЕ] Проблемы с базой mysql - большая нагрузка блогов 3 февраля 2016 в 23:00
Была подобная проблема. Сайт периодически зависал, страницы открывались по 5 минут и иногда вываливался can't mysql connect. После перезагрузки сервера работает две минуты нормально и опять переходит на черепашьи скорости.
Техподдержку хостера я задолбал тикетами насмерть. Чуть не до ругани дело доходило.

Исправил проблему уняв прыть поисковых ботов. И хоть меня и пытались убедить, что я в корне не прав, но я вижу факты, то есть разницу было/стало.
instantcms.ru/forum/thread23461.html
#3 Не обязательно email 2 февраля 2016 в 22:45

Ну правильно. Нормальные герои, всегда иду в обход))

Нил™

Как авторизоваться без мыла — уже обговорено.
instantcms.ru/forum/thread21606.html#206468
#4 Не обязательно email 2 февраля 2016 в 08:45

Кто нибудь может подсказать, что еще можно сделать?

Нил™
При отсутствии мыла автоматом записывать в эту колонку логин.
#5 Компонент создать команду 1 февраля 2016 в 22:39

Дело в том что я хочу что бы и группы были и этот компонент например /groups был /team

Нико
Создать копию компонента несложно. Скопировать все файлы из компонента groups в папку teams, открыть все файлы в ноутпэде++, заменить во всех открытых файлах group на team. Ну и три таблицы задублировать с такой же заменой. Дел на 5 минут.
Основная сложность в том, что компонент groups очень сильно интегрирован с остальными компонентами инстанта. И интегрировать так же дубль этого компонента будет не так просто.
#6 Компонент создать команду 1 февраля 2016 в 19:48
Нико,
Переименуйте в файле \system\languages\ru\controllers\groups\groups.php все группы в команды и будет Вам счастье.
#7 Посоветуйте решение или скрипт 1 февраля 2016 в 15:19
Посмотрел что за аннотации.
Похоже, что туда можно впихнуть картинки, ссылки и вроде даже html.
А вот логику типа php туда впихнуть не получится. Поэтому самый рабоче-крестьянский вариант представляется таким.
Вешается аннотация со ссылками. Ссылки ведут на сайт, откуда тупо редиректятся на ютуб. каждый редирект — накрутка счетчика на сайте.
А вот вывести результаты счетчика в аннотацию вряд ли получится.
#8 Посоветуйте решение или скрипт 31 января 2016 в 21:22
De.Ground,
Прошу прощения.
В этом вопросе помочь ничем не смогу, поскольку не знаю, что такое аннотации на ютюбе и как туда чего вставлять.

Могу только посоветовать вставить в названия радиокнопок ссылки на ютюб.

  1.  
  2. <p><b>Какой мультик вам больше нравится?:</b><Br>
  3. <p><b>Пример опроса:</b><Br>
  4. <input type="radio" name="vote" value="1"><a href="http;//www.youtube.com/watch?v=gVEHBYHj8Sk" >Чебурашка</a><br>
  5. <input type="radio" name="vote" value="2"><a href="http://www.youtube.com/watch?v=qiKmt3wOJXQ" >Простоквашка</a><br>
  6. <input type="radio" name="vote" value="3"><a href="http://www.youtube.com/watch?v=3fdiJlPex8s" >Ивашка под простоквашкой</a><br>
  7. </p>
  8. <p><input type="submit" value="Голосовать">
#9 Посоветуйте решение или скрипт 31 января 2016 в 19:44
А переделать радиокнопки в чекбоксы со ссылками?
#1 Как присоединить таблицу 31 января 2016 в 14:17
Есть у меня тип контента, подразумевающий спецолимпиаду.
Создал набор, в котором выводятся лучшие посты, которые за определенное время голосования набрали наибольшее количество баллов рейтинга.
Для этого в таблицу cms_rating_log добавил колонку votedate, и добавил в компонент заполнение этой колонки временем голосования. Тут всё работает и замечательно добавляется время в колонку.

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

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

SELECT COUNT(i.id) as count
FROM cms_con_anec i
WHERE (i.votedate >= DATE_SUB(NOW(), INTERVAL 1 DAY)) AND (i.votedate < DATE_SUB(NOW(), INTERVAL 2 DAY)) AND (i.is_parent_hidden IS NULL) AND (i.is_approved = '1') AND (i.is_pub = '1')
Последние вызовы:

getCount() @ D:\open\OpenServer\domains\tren.ru\system\controllers\content\model.php: 1496
getContentItemsCount() @ D:\open\OpenServer\domains\tren.ru\system\controllers\content\frontend.php: 181
renderItemsList()
call_user_func_array() @ D:\open\OpenServer\domains\tren.ru\system\core\action.php: 29
__call() @ D:\open\OpenServer\domains\tren.ru\system\controllers\content\actions\category_view.php: 92
renderItemsList() @ D:\open\OpenServer\domains\tren.ru\system\controllers\content\actions\category_view.php: 92
run()
call_user_func_array() @ D:\open\OpenServer\domains\tren.ru\system\core\controller.php: 278
runExternalAction() @ D:\open\OpenServer\domains\tren.ru\system\core\controller.php: 209
runAction() @ D:\open\OpenServer\domains\tren.ru\system\controllers\content\frontend.php: 28
route()
Это и понятно, в cms_con_anec такой колонки нет. Теперь нужно подключить в выборку таблицу cms_rating_log. А вот как это сделать — ума не приложу.
Как в инструкции, написал $this->join('rating_log', 'r', 'r.target_id = i.id');
Пробовал засовывать это в разные места \system\controllers\content\model.php — никакого результата.

Кто может подсказать, в каком месте этой модели производится выборка из таблицы контента и как туда присоединить выборку из таблицы рейтинга?
______________________________________________________________________________________________________

Влепил в content\frontend.php строку
$total = $this->model->join('rating_log', 'r', 'r.target_id = i.id')->getContentItemsCount($ctype['name']);

Теперь ошибка выглядит так:
  1. Unknown column 'i.votedate' in 'where clause'
  2.  
  3. SELECT COUNT(i.id) as count
  4. FROM cms_con_anec i
  5. JOIN cms_rating_log as r ON r.target_id = i.id
  6. WHERE (i.votedate >= DATE_SUB(NOW(), INTERVAL 1 DAY)) AND (i.votedate < DATE_SUB(NOW(), INTERVAL 2 DAY)) AND (i.is_parent_hidden IS NULL) AND (i.is_approved = '1') AND (i.is_pub = '1')
Осталось выяснить, как сменить элиас полю, либо как сделать, чтобы запрос выполнялся не к i.votedate а к r.votedate?
#10 Не работает модуль "Кто онлайн" 31 января 2016 в 13:43
Дикарка,
Мне всегда помогало просто очистить таблицу cms_online

Заходите в phpmyadmin, выбираете эту таблицу, жмете вверху "операции" и Очистить таблицу (TRUNCATE).
#11 Дубликат плагина Автофорум 29 января 2016 в 23:03
Переименовать переменные.
Я так копию компонента делал. Причем не глядя, групповой заменой в ноутпэде++.
#12 [ЕСТЬ РЕШЕНИЕ] Пропали блоги 28 января 2016 в 19:31
Александр Потапов,
Буквально позавчера сталкивался. Но у меня пропали блоги только одного клуба. Пытаю модераторов. Пока никто не сознался.
#13 [ЕСТЬ РЕШЕНИЕ] Как вставить виджет прям в тело страницы 28 января 2016 в 16:59

И виджет вызываемый ajaxom при нажатии на ссылку вход не пойдет.

VonKruger
А Вы попробуйте не просто кликнуть на ту ссылку, а правой кнопкой — открыть в новой вкладке. Откроется вполне нормальная страница авторизации.
Осталось запретить открывать эту ссылку аяксом и вставить на страницу виджет.
🍪Мы используем файлы cookie для работы сайта. Читать подробнее.