Вход • Регистрация

Всего найдено: 5692

  • 5 марта , редакция: 1741123691
  • Цитата
    в итоге 1-1,5 секунд а не 14
    уже лучше

    Опять же! Я и Ростиславу говорил несколько раз и Евгения внимание хочу ещё раз обратить, что если мы имеем сотни-сотни тысяч и миллионы записей в нескольких разных таблицах, то как не крути, множественные запросы в БД чисто физически не смогут исполниться за доли секунды.

    Вышеуказанные в теме запросы обрабатывают миллионы строк в цикле и 1.5 секунды - это адекватное время. Это нормально.
    И как раз на такие случаи помимо кеширования (в котором всё быстрее 1.5 секунд) у нас в CMS есть прекрасный инструмент lazy. Добавляем параметр lazy=defer в тег show_search и всё, сайт открывается за 0.2 секунды и пока пару секунд подгружаются шрифты, баннеры и прочие картинки, 1.5 секунды совершенно незаметно фоном грузится и фильтр. Визуально сайт открывается как пуля.
    Я не знаю, почему нужно из принципа сражаться , чтобы фильтр грузился в потоке основного источника html и тормозил всю страницу...
  • 5 марта
  • Цитата
    импорте была еще тонна дублей (когда значение писалось как "220" "220в" "220вольт"/ "круг" "круглый" "окружность" и тд и тп)
    Уф... Понятно
    Цитата
    для существующих дел и в будующем для новой версии пока предлагаю внести айдишник знчения выпадающего списка и джойнить по нему

    👍 Но, опять же, проблему с кучей смысловых дублей это не решит, за исключением того, что на int можно индекс поставить. А вот если придумать инструмент, когда одному id значения характеристики можно соотносить кучу аналогичных "Круг", "Круглый", "Окружность" и при поиске они бы все выходили по одному id, это было прям хорошо. Но как это администрировать не понятно, и как изначально заносить и соотносить...
    Цитата
    ограничить для поиска выборку только характеристиками отмеченными для поиска - уже думаю пока будет достаточно
    Это да, но за исключением случаев, когда кто-то хочет у каждого значения каждой характеристики фильтра иметь циферку "Сколько будет найдено товаров по этой галке". А у нас тот же Степан эту величину клянчил долго для своего фильтра, сам её везде совал, и вот она аукивается вот так на больших разнородных таблицах. Т.к. для вывода фильтра один шиш надо перебирать всю базу предварительно
  • 23 сентября 2024 г. , редакция: 1727080324
  • Это форма оформления не основного заказа, а форма оформления заказа в один клик, скорее всего. Там капчу обычно не ставят. Попробуйте отключить в настройках магазина эту галку и посмотреть продолжится ли спам
    Цитата
    Зачем это делают?
    Так это боты. Им пофиг, они сайт не видят, они видят html-источник. Нашли сайт, и давай по ссылкам ходить, открыли страницу товара , смотрят, о, форма какая-то - значит надо заполнить своим спамом, авось куда-нибудь долетит и опубликуется. Заполнили, отправили. Один раз форма сработала и всё, ставится на автомат и погнали лупить туда весь спам, какой есть.
  • 10 июня 2024 г.
  • У нас доступ ко всем файлам есть, конечно, но на бесплатном и тестовом шаблон править мы не всегда охотно бросаемся )
    Цитата
    беда что текст начинается с разделителя ":" . Нельзя ли как-то убрать разделитель?
    Там заголовок характеристики должен быть скорее всего, который не поставили, а двоеточие не убрали. Да, в шаблоне можно поправить
  • 09 июня 2024 г.
  • Цитата
    Не особо разбираюсь в БД, если что не сильно закидывайте кирпичами )))

    Цитата
    А если несколько полей за один запрос получить надо, то правильно понимаю должно быть чтото типа этого?

    Дмитрий, не путайте как раз ещё методы обращения к БД и получаемые результаты ;)

    Киньте глаз на документацию https://www.diafan.ru/dokument/full-manual/developers/includes/database/
    Где начинается:

    DB::query_result () - просто запрос и просто ответ в одну переменную, как его БД отдаст, обычно, когда нужно просто получить быстрый, точный конкретный результат при LIMIT 1, например, получить id или name
    DB::query_fetch_array () - это будет уже массив, где поля БД - индексы массива, когда надо получить строку из БД
    DB::query_fetch_all () - это будет двумерный массив, где будет куча строк из БД на первом уровне порядковые номера строк от 0,1,2,3 и пр, а в каждом элементе уже вторая вложенность с индексами из названия полей БД
    DB::query_range_fetch_all - то же самое, что выше, но не все, а можно указывать range, типа limit 100, 100

    Цитата
    $autor= DB::query_result("SELECT name1, keywords1 FROM {clauses} WHERE id='%h'", $autorID);

    То есть, не DB::query_result ;))))
  • 09 июня 2024 г. , редакция: 1717943697
  • Дальше! Вот так не надо:
    Код
    $autor = DB::query_fetch_all("SELECT autor, name1 FROM {site} AS s INNER JOIN {clauses} WHERE id='.$autorID.'");

    Всегда указывайте маску (%s, %d, %h, %fи пр.) и выносите переменную за скобки. Так Вы от sqlinjection застрахуетесь, система за Вас всю фильтрацию сделает )
    Как у Александры
    Код
    $autor= DB::query_result("SELECT name1 FROM {clauses} WHERE id='%h'", $autorID);

    НО! Александра, зачем маска %h? ))
    %h - это для текстовых переменных без HTML, то есть, чтобы в передаваемой в запрос строковой переменной почистились всякие теги, если они есть. Эту маску нужно использовать, когда передается строка и там не было ничего кроме символов и цифр.
    Код
    DB::query_result("SELECT id FROM {clauses} WHERE name='%h'", $autorNAME);
    - например в таком запросе да, надо %H
    А если у нас заведомо числовая переменная и числовое поле БД, то надо маску %d - digit, цифры

    Код
    $autor= DB::query_result("SELECT name1 FROM {clauses} WHERE id='%d'", $autorID);
    - вот так, тут кроме цифр ничего не пролезет

    И ещё момент!
    Поле name1 - здесь 1- это номер языковой версии для переводимого поля.
    Если на сайте два языка, в таблице будет name1 и name2 в БД.
    Если 3, будет name1, name2, name3 и т.д.
    Мы же не будем отбирать каждый раз name1 или name3 для каждой версии?
    Поэтому в запросах переводимые поля можно запрашивать просто в квадратных скобках: [name] и система автоматически подставит 1 (или иной индекс текущего языка в системе)

    То есть, итого:
    Код
    $autor= DB::query_result("SELECT [name] FROM {clauses} WHERE id='%d'", $autorID);
  • 16 марта 2024 г.
  • Цитата
    На сайте была сделана доработка вывода старой цены в товарах (программистом) и после этого начались проблемы

    Скорее просто совпадение, программистской связи никакой между этими событиями
  • 11 марта 2024 г.
  • Цитата
    Может быть есть возможность вставить код iframe в это место??

    Код Вы и вставляете, в нём можно width и height поменять на вертикальные и вставить.
    Но может на сайте в карточке товара уже css его как-то меняет. В таких случаях нужно прилагать ссылку на сайт на товар, где вставлено видео и тогда можно будет сказать конкретно, как его развернуть
  • 24 января 2024 г.
  • Цитата
    вывод "старой цены" чтобы можно было менять без открытия карточки товара
    Это же несложно, там же массив под fast_edit. Подсказать? Или пусть исполнитель сделает?
  • 17 января 2024 г. , редакция: 1705491599
  • По поведению выглядит, как будто Аякс не получает ответа о завершении загрузки. Или получает его в неверном формате. А это бывает, когда включен режим разработки и есть какие-то предупреждения на сайте, которые лезут в json и ломают ответ.
    Включён режим разработки?
  • 18 января 2024 г.
  • Ну консольку откройте, вкладку Network, и когда загружаете файл, будет видно отправляемый запрос, куда он идёт и какой там ответ. В ответе будет либо success, либо какое-то сообщение, по которому должно быть понятно, в чём проблема
  • 15 января 2024 г.
  • А вот же наш партнер когда ещё писал https://searchengines.guru/ru/forum/925143
    Цитата
    Дубликаты URL в каталога, меню, благодаря отсутствию элементарных проверок в CMS на существование роута;
    Кривых каталоги продукции с дулями товаров, о которых узнаешь уже из поискового индекса;
    Кривая пагинация, которая вообще не в курсе сколько реально страниц на сайте;
    Кривые ридеректы;
    404 ошибки, которые продолжают отображать контент страницы;
    Ужасные куски непонятного кода;
    Не внятная работа хлебных крошек, банальными косяками типа ссылка сама на себя;
    Кривая работа ЧПУ;
    И еще бесконечно большая куча ошибок

    Цитата
    Лидером в производстве кривого платного софта я считаю Bitrix. Привет парни :) Вы обеспечиваете работой многих оптимизаторов!

    🤷🏻‍♂️
  • 30 декабря 2023 г.
  • Вы либо в багтреке пишите, либо на форуме. Зачем копипастить?
    Я ответил в багтреке https://user.diafan.ru/wishlist/show4180/
    Цитата
    суть в том чтоб наложить купон поверх других скидок

    Так нельзя делать. В алгоритме коробки точно. Себе можете костыль сделать, если контролируете купоны вручную на своём магазине, но это логическая ошибка.
  • 12 декабря 2023 г.
  • cart.action.php
    order()
    Перед оформлением заказа у нас стоит:
    Код
    foreach($cart["rows"] as $row)
    {
    if($row["price_count"] < $row["count"])
    {
    $this->result["errors"][0] = $this->diafan->_('К сожалению, закончился товар %s. Пожалуйста, отредактируйте заказ.', false, $row["good"]["name"._LANG]);
    return;
    }
    }

    Так что, не важно, когда положили в корзину, только что или неделю назад, заказ он не оформит.
    Версия какая-нибудь старая может? Или action лежит в custom?
  • 12 декабря 2023 г.
  • Цитата
    Но пользуешься кнопочкой "Нет в наличии" и закрываешь товар к покупке.Но пользуешься кнопочкой "Нет в наличии" и закрываешь товар к покупке.

    Ааа, кнопочкой! То есть, в одном поле у товара остатки есть, но в то же время "Нет в наличии"? Ну такооооое.... )))
    Это да, это мы не проверяем.

    Ну давайте и эту проверку поставим, ладно. Хотя кто-нибудь через полгода скажет, чего за фигня, я остатки обновил, было 0, стало 10, а купить нельзя, так как галка "Нет в наличии" стоит ) Хотя может галка и приоритетнее
  • 13 декабря 2023 г.
  • Поправили, в обновлении сегодня выйдет
    Куму вручную:
    Код
    foreach($cart["rows"] as $row)
    {
    if($row["good"]["no_buy"])
    {
    $this->result["errors"][0] = $this->diafan->_('К сожалению, товар %s больше не в наличии. Пожалуйста, отредактируйте заказ.', false, $row["good"]["name"._LANG]);
    return;
    }
    if($row["price_count"] < $row["count"])
    {
    $this->result["errors"][0] = $this->diafan->_('К сожалению, закончился товар %s. Пожалуйста, отредактируйте заказ.', false, $row["good"]["name"._LANG]);
    return;
    }
    }
  • 28 ноября 2023 г.
  • Да, бывает две формы заказа, типа обычная и скрытая в display none для мобильной версии, на сайте не видно, но ajax две формы видит в источнике и пуляет обе.

    Но вот с этим не сходится по поведению
    Цитата
    При добавлении в корзину разными пользователями одного товара, улетает 2 товара двум разным пользователям
Показывать по:

Новости

  • 19 сентября
  • Мы внесли изменения в лицензию и объявляем, что прекращаем техническую консультационную поддержку сайтов на DIAFAN.CMS версий старше 7.0. А это все минорные версии платформы, предшествующие актуальной линейке, а именно: версии серии 4.x, 5.x, 6.x.
  • 15 сентября
  • У нас отличные новости! Мы выпустили новую сборку DIAFAN.CMS 7.3, которая включает встроенные нейросети непосредственно в административной панели. Это значит, что создание контента для вашего сайта больше не будет проблемой — искусственный интеллект возьмет эту задачу на себя, избавляя вас от необходимости привлекать копирайтеров или тратить время на написание текстов самостоятельно.
  • 25 марта
  • Мы обновили систему тарифов, учитывая опыт работы с клиентами и современные рыночные условия. Новая тарифная сетка разработана специально для того, чтобы лучше отвечать вашим потребностям. Резкого повышения цен не произошло. Более того, некоторые тарифы даже стали выгоднее и доступнее. 

Блоги

  • 10.09.2025
  • DIAFAN.CMS славится нагрузоустойчивостью и безопасностью, про инциденты со взломом сайта на нашей системе давненько не слышали, но недавно получили мы письмо от fstec.ru такого характера:

    Обнаружена уязвимость в CMS-системе DIAFAN, позволяющая нарушителю, действующему удалённо, красть сессионные куки через XSS-атаку.

Форум