Ris

Ris

+657
Репутация
3771
Рейтинг
#1 Нужно доработать InstantCMS до серьёзной площадки. 16 февраля 2018 в 23:36

Да. А что тут смешного?

yaksardas
Напишите ваши предложения в личку этим людям:
instantcms.ru/users/1205/sendmessage.html
instantcms.ru/users/1292/sendmessage.html

Вот то, что они Вам ответят — будет серьезно.
Всё остальное — смешно…
#2 Вывод количества материала в категориях 16 февраля 2018 в 13:45

Код вставить могу, знать бы куда, спасибо .

@Elv
Вот файл \templates\default\controllers\content\category_view.tpl.php целиком:
  1. <?php
  2.  
  3. $list_header = empty($ctype['labels']['list']) ? $ctype['title'] : $ctype['labels']['list'];
  4. $page_header = isset($category['title']) ? $category['title'] : $list_header;
  5. $rss_query = isset($category['id']) ? "?category={$category['id']}" : '';
  6.  
  7. $base_url = $ctype['name'];
  8. $base_ds_url = href_to_rel($ctype['name']) . '%s' . (isset($category['slug']) ? '/'.$category['slug'] : '');
  9.  
  10. if (!$is_frontpage){
  11.  
  12. $seo_title = false;
  13. if (!empty($ctype['seo_title'])){ $seo_title = $ctype['seo_title']; }
  14. if (!empty($category['seo_title'])){ $seo_title = $category['seo_title']; }
  15. if (!$seo_title) { $seo_title = $page_header; }
  16. if (!empty($current_dataset['title'])){ $seo_title .= ' · '.$current_dataset['title']; }
  17. if (!empty($current_dataset['seo_title'])){ $seo_title = $current_dataset['seo_title']; }
  18.  
  19. $this->setPageTitle($seo_title);
  20.  
  21. if (!empty($ctype['seo_keys'])){ $this->setPageKeywords($ctype['seo_keys']); }
  22. if (!empty($ctype['seo_desc'])){ $this->setPageDescription($ctype['seo_desc']); }
  23. if (!empty($category['seo_keys'])){ $this->setPageKeywords($category['seo_keys']); }
  24. if (!empty($category['seo_desc'])){ $this->setPageDescription($category['seo_desc']); }
  25. if (!empty($current_dataset['seo_keys'])){ $this->setPageKeywords($current_dataset['seo_keys']); }
  26. if (!empty($current_dataset['seo_desc'])){ $this->setPageDescription($current_dataset['seo_desc']); }
  27.  
  28. $meta_item = !empty($category['id']) ? $category : (!empty($current_dataset['id']) ? $current_dataset : array());
  29.  
  30. $this->setPageKeywordsItem($meta_item)->setPageDescriptionItem($meta_item)->setPageTitleItem($meta_item);
  31.  
  32. }
  33.  
  34. if ($ctype['options']['list_on'] && !$request->isInternal() && !$is_frontpage){
  35. $this->addBreadcrumb($list_header, href_to($base_url));
  36. }
  37.  
  38. if (isset($category['path']) && $category['path']){
  39. foreach($category['path'] as $c){
  40. $this->addBreadcrumb($c['title'], href_to($base_url, $c['slug']));
  41. }
  42. }
  43.  
  44. if (cmsUser::isAllowed($ctype['name'], 'add')) {
  45.  
  46. if (!$category['id'] || $user->isInGroups($category['allow_add'])){
  47.  
  48. $href = href_to($ctype['name'], 'add', isset($category['path']) ? $category['id'] : '');
  49.  
  50. $this->addToolButton(array(
  51. 'class' => 'add',
  52. 'title' => sprintf(LANG_CONTENT_ADD_ITEM, $ctype['labels']['create']),
  53. 'href' => $href
  54. ));
  55.  
  56. }
  57.  
  58. }
  59.  
  60. if ($ctype['is_cats']){
  61. if (cmsUser::isAllowed($ctype['name'], 'add_cat')) {
  62. $this->addToolButton(array(
  63. 'class' => 'folder_add',
  64. 'title' => LANG_ADD_CATEGORY,
  65. 'href' => href_to($ctype['name'], 'addcat', $category['id'])
  66. ));
  67. }
  68.  
  69. if ($category['id']){
  70.  
  71. if (cmsUser::isAllowed($ctype['name'], 'edit_cat')) {
  72. $this->addToolButton(array(
  73. 'class' => 'folder_edit',
  74. 'title' => LANG_EDIT_CATEGORY,
  75. 'href' => href_to($ctype['name'], 'editcat', $category['id'])
  76. ));
  77. }
  78. if (cmsUser::isAllowed($ctype['name'], 'delete_cat')) {
  79. $this->addToolButton(array(
  80. 'class' => 'folder_delete',
  81. 'title' => LANG_DELETE_CATEGORY,
  82. 'href' => href_to($ctype['name'], 'delcat', $category['id']),
  83. 'onclick' => "if(!confirm('".LANG_DELETE_CATEGORY_CONFIRM."')){ return false; }"
  84. ));
  85. }
  86.  
  87. }
  88. }
  89.  
  90. if (cmsUser::isAdmin()){
  91. $this->addToolButton(array(
  92. 'class' => 'page_gear',
  93. 'title' => sprintf(LANG_CONTENT_TYPE_SETTINGS, mb_strtolower($ctype['title'])),
  94. 'href' => href_to('admin', 'ctypes', array('edit', $ctype['id']))
  95. ));
  96. }
  97.  
  98. ?>
  99.  
  100. <?php if ($page_header && !$request->isInternal() && !$is_frontpage){ ?>
  101. <?php if (!empty($list_styles)){ ?>
  102. <div class="content_list_styles">
  103. <?php foreach ($list_styles as $list_style) { ?>
  104. <a rel="nofollow" href="<?php echo $list_style['url']; ?>" class="style_switch <?php echo $list_style['class']; ?>">
  105. <?php echo $list_style['title']; ?>
  106. </a>
  107. <?php } ?>
  108. </div>
  109. <?php } ?>
  110. <h1>
  111. <?php echo $page_header; ?>
  112. <?php if (!empty($ctype['options']['is_rss']) && $this->controller->isControllerEnabled('rss')){ ?>
  113. <a class="inline_rss_icon" title="RSS" href="<?php echo href_to('rss', 'feed', $ctype['name']) . $rss_query; ?>"></a>
  114. <?php } ?>
  115. </h1>
  116. <?php } ?>
  117.  
  118. <?php if ($datasets && !$is_hide_items){
  119. $this->renderAsset('ui/datasets-panel', array(
  120. 'datasets' => $datasets,
  121. 'dataset_name' => $dataset,
  122. 'current_dataset' => $current_dataset,
  123. 'ds_prefix' => '-',
  124. 'base_ds_url'
#3 Вывод количества материала в категориях 16 февраля 2018 в 12:02

Если много запросов к БД, кто может допилить рубрикатор ?

@Elv
А что, в рубрикаторе запросов мало? Кто-то сравнивал?
В любом случае, для каждой категории будет запрос SELECT COUNT. И уйти от этого можно только добавив колонку со счетчиком материалов в таблицу категорий.
=========================================================
Можно попробовать вот так считать материалы в категориях:
  1. $cat_count = cmsCore::getModel('content')
  2. ->joinLeft('con_articles_cats', 'ac', 'i.category_id = ac.id')->filterGtEqual('ac.ns_left', $c['ns_left'])->filterLtEqual('ac.ns_right', $c['ns_right'])
  3. ->getCount('con_'.$ctype['name'].'_cats_bind', "category_id = {$c['id']}");
Может будет побыстрее…
#4 Вывод количества материала в категориях 16 февраля 2018 в 08:06
Что-то такое уже обсуждалось:
instantcms.ru/forum/thread20918-2.html#279732
#5 Шаблон профиля 15 февраля 2018 в 17:07
#6 Смена системного имени в типах контента 15 февраля 2018 в 15:40
Capitan,
А в чем собственно сложность-то?
Переименовываем все нужные таблицы, переименовываем системное имя типа контента и всё!
Вот на примере переименования articles в stati:
  1. RENAME TABLE `cms_con_articles` TO `cms_con_stati`;
  2. RENAME TABLE `cms_con_articles_cats` TO `cms_con_stati_cats`;
  3. RENAME TABLE `cms_con_articles_cats_bind` TO `cms_con_stati_cats_bind`;
  4. RENAME TABLE `cms_con_articles_fields` TO `cms_con_stati_fields`;
  5. RENAME TABLE `cms_con_articles_props` TO `cms_con_stati_props`;
  6. RENAME TABLE `cms_con_articles_props_bind` TO `cms_con_stati_props_bind`;
  7. RENAME TABLE `cms_con_articles_props_values` TO `cms_con_stati_props_values`;
  8. UPDATE `cms_content_types` SET `name` = 'stati' WHERE `name` = 'articles';
  9. UPDATE `cms_widgets_pages` SET `name` = REPLACE(name,'articles', 'stati');
#7 [ЕСТЬ РЕШЕНИЕ] Не грузятся фото свыше 250мб и шириной более 1000px 14 февраля 2018 в 16:19
Alteste,
Посмотрите ошибки в логах сервера. Если будет что-то про MaxRequestLen — почитайте вот тут:
www.sysmasters.net/kb/ustranenie-oshibki-max-request-length-pri-ispolzovanii-fcgi/
#8 Где сокрыт стиль... 13 февраля 2018 в 15:46

Но где прячутся стили эти хотелось бы узнать

Yar
Это стили вашего браузера.
#9 [ЕСТЬ РЕШЕНИЕ] нужна помощь знатоков 10 февраля 2018 в 21:01
olegan,
Раз всё так сурово — зайдите в phpmyadmin и отключите там временно компонент .
is_enabled — поставьте 0
#10 [ЕСТЬ РЕШЕНИЕ] нужна помощь знатоков 10 февраля 2018 в 20:32

но войти в админку без капчи не могу

olegan
Но почему? Наберите в адресной строке ваш_сайт.ру/admin и нажимайте там "вход для администраторов".
#11 Долгие запросы MySql 10 февраля 2018 в 12:34
Fuze,
Вы оказались правы! Дело было в индексах.
Добавил во все индексы датасетов строку date_pub на первое место. Во всех индексах, где эта строка была, тоже выставил её на первое место.
Теперь запрос выполняется в тысячу раз быстрее:
  1. SELECT i.*, u.nickname AS user_nickname, f.title AS folder_title
  2. FROM cms_con_anec i
  3. FORCE INDEX FOR ORDER BY (date_pub)
  4. INNER JOIN cms_users AS u FORCE INDEX (PRIMARY) ON u.id = i.user_id
  5. LEFT JOIN cms_content_folders AS f ON f.id = i.folder_id
  6. WHERE (i.is_parent_hidden IS NULL) AND (i.rating > '-20') AND (i.is_deleted IS NULL) AND (i.is_pub = '1')
  7. ORDER BY i.date_pub DESC
  8. LIMIT 0, 30
  9. Время выполнения 0.00471 секунд
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE i index NULL date_pub 10 NULL 30 Using where
1 SIMPLE u eq_ref PRIMARY PRIMARY 4 neos_1.i.user_id 1
1 SIMPLE f eq_ref PRIMARY PRIMARY 4 neos_1.i.folder_id 1 Using where
Теперь еще одна проблема — выборка комментариев выполняется 15 секунд:
  1. /system\controllers\comments\model.php => 298 => modelComments->getComments()
  2. SELECT i.*, r.score AS is_rated, u.nickname AS user_nickname, u.avatar AS user_avatar
  3. FROM cms_comments i
  4. LEFT JOIN cms_users AS u ON u.id = i.user_id
  5. LEFT JOIN cms_comments_rating AS r ON r.comment_id = i.id AND r.user_id='86'
  6. WHERE (i.user_id = '86') AND (i.is_deleted IS NULL)
  7. ORDER BY i.is_approved DESC, i.date_pub DESC
  8. LIMIT 0, 20
  9. Время выполнения 15.11935 секунд
Причем, если убрать ORDER BY i.is_approved desc — время запроса резко уменьшается.
  1. Отображение строк 0 - 19 (20 всего, Запрос занял 0.0310 сек.) [date_pub: 2018-02-10 01:19:23... - 2018-02-08 20:10:31...]
  2. SELECT i.*, r.score AS is_rated, u.nickname AS user_nickname, u.avatar AS user_avatar FROM cms_comments i LEFT JOIN cms_users AS u ON u.id = i.user_id LEFT JOIN cms_comments_rating AS r ON r.comment_id = i.id AND r.user_id='86' WHERE (i.user_id = '86') AND (i.is_deleted IS NULL) ORDER BY i.date_pub DESC LIMIT 0, 20
Вопрос, откуда берется этот ORDER BY i.is_approved desc и как его убрать из запроса?
#12 Пропал режим кода в редакторе 10 февраля 2018 в 01:13
Yar,
Можно смело удалить или закомментировать все три строки, но я обычно выдаю эту кнопку только тем, кто знает, как с нею обращаться.
  1. if (!$user->is_admin && $user-> id != 123 /* 123 заменить на номер нужного юзера*/) {
  2. $options['buttonSource'] = false;
  3. }
#13 Пропал режим кода в редакторе 9 февраля 2018 в 23:36
  1. if (!$user->is_admin) {
  2. $options['buttonSource'] = false;
  3. }
Это написано в файле \wysiwyg\redactor\wysiwyg.class.php
#14 Долгие запросы MySql 8 февраля 2018 в 19:41

Ну ладно, вижу зря я тут к вам влез со своими умозаключениями, успехов!

eoleg
Нет уж, Вы расскажите, как мемкешед мускул кеширует. Я хотя бы попробую на тестовом сервере.
#15 Долгие запросы MySql 8 февраля 2018 в 19:24

Насчёт ошибки — всё же memcached разве работает с MyISAM?

eoleg
Какой ошибки?
Мемкешед разве не результирующие html кэширует?
У мускула вроде свой кэш?
🍪Мы используем файлы cookie для работы сайта. Читать подробнее.