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

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

  • 11 августа 2016 г. , редакция: 1470912866
  • Степан, тут важно понимать логику системы.

    Есть доки, где одна из самых интересных страниц - Архитектура БД DIAFAN.CMS

    (маленькое отступление: документация у нас в большинстве своем генерируется "на лету", из гита, где лежит система. ПОМНИТЕ, что когда мы выкладываем очередное обновление, и там в каком-то модуле есть изменения в БД, они сразу будут отображены на этой странице! То есть, документация анализирует инсталл-файлы всей CMS из гита и на основании их формирует документацию, например, поэтому модуль отзывов мы еще не описали в доках, т.к. полируем его еще, но на станице доков БД таблица модуля "отзывы" REVIEWS уже есть)

    Так вот, нужно помнить, что все цены всех товаров у нас лежат в таблице SHOP_PRICE

    Мы писали https://habrahabr.ru/company/diafan/blog/300930/ что мы все пересчеты делаем только в админке, как раз на примере цен:

    Цитата
    7. Минимизируйте динамическое получение данных

    Лучше один раз подождать администратору сайта, чем ждать будет каждый пользователь.

    Например, в Diafan.CMS есть гибкая система скидок, когда у одного товара может быть несколько цен, каждая с установленной скидкой, еще и в разных валютах. Мы не высчитываем новые цены на сайте для каждого посетителя сайта. Мы делаем это при установке скидки в административной части сайта, считаем все различные варианты цены для выбранных товаров и собираем их в отдельную таблицу shop_price с признаком price_id. Исходная цена на товар определяется как id=price_id. Если id<>price_id, то это уже вариация цены либо со скидкой либо в основной валюте сайта. И в этой таблице сразу указывается для кого эта цена (если она установлена для какой-то конкретной группы пользователей).

    Да, если товаров много, при добавлении или изменении скидки администратор будет ждать, глядя на крутящееся колесико. Зато посетителям сайта ждать не придется, ведь при выводе на сайте, а также при поиске, сортировке и прочих ёмких операциях система просто из всех доступных цен из одной таблицы по одному price_id выбирает самую маленькую и всё.


    Таким образом делаем вывод, что когда мы меняем курс валют, все цены пересчитываются. Ведь единая цена по всему сайту у нас в основной валюте.

    Значит, идем в админку, в файл валют: /modules/shop/admin/shop.admin.currency.php
    Видим функцию save_variable_exchange_rate()
    Там один запрос на сохранение нового курса
    Код
    UPDATE {shop_currency} SET exchange_rate='%f'

    и
    Код
    $this->diafan->_shop->price_calc(0, 0, $this->diafan->id);

    судя по названию price_calc - пересчет цен.

    Все такие функции лежат в /modules/shop/inc/shop.inc.price.php

    (подключение $this->diafan->_shop->price_calc() означает взять из INC файла PRICE shop.inc.price.php функцию CALC)

    Открываем файл и видим
    Код
    /**
    * Рассчитывает все возможные вариации цен и записывает их в базу данных
    *
    * @param integer $good_id номер товара, если не задан, цены рассчитываются для всех товаров
    * @param integer $discount_id номер скидки
    * @param integer $currency_id номер валюты, если нужно изменить цены, указанные в валюте
    * @return void
    */
    public function calc($good_id = 0, $discount_id = 0, $currency_id = 0)

    То есть, эту функцию можно дергать где угодно, чтобы пересчитать цены. Для скидок. Для валют.

    Поэтому Ваша задача сделать модуль, который дернет курс валюты с сайта ЦБ, запишет его в БД shop_currency и дернет в его учетом функцию
    Код
    $this->diafan->_shop->price_calc(0, 0, $this->diafan->id);

  • 11 августа 2016 г.
  • Идея хорошая, публичные вопросы и публичные ответы. Я буду вести топик, если что привлекать коллег. Все могут задавать уточняющие вопросы.
    Степан, давайте только сразу договоримся об удобсстве. Каждый вопрос отдельным сообщением, чтобы на него можно было отдельно отвечать и обсуждать. Я разделю тему.
  • 11 августа 2016 г. , редакция: 1470911766
  • СТЕПАН (IDXDOC):
    Вопрос 1:
    Вчера увидел в проектах задачу сделать автообновление курса валют, что и сам уже давно хотел сделать, но руки не доходили.
    Мне это важно сделать, поскольку у меня 30 сайтов, на которых все товары в валюте, и каждое утро менять руками это не очень круто.
    Помимо автообновления нужно сделать поле, в котором будет записываться процент, который необходимо вычитать их курса валюты.
  • 11 августа 2016 г. , редакция: 1470911784
  • СТЕПАН (IDXDOC):
    Вопрос 3:
    В поиске по товарам, вывести минимальную и максимальную цену в рублях, даже если в админке цены в валюте, в зависимости в какой мы категории
    Находил решение, просто поставил в нужное место и все заработало, а почему это решение работает так и не понял, но работало оно пока я не переписал цены в валюту.
  • 15 августа 2016 г.
  • 1. Тут как обычно, двигаться надо от основного: от БД. Любая информация запоминается в базе, поэтому смотрим, что есть, и думаем, как это можно нарастить.
    Наша любимая страница из доков: Архитектура БД таблица#bs_site_rel - видим, что в ней хранится связь баннеров и страниц сайта.
    Далее уже думать, как лучше приделать категории. Можно отдельную таблицу сделать, можно в эту добавить поле category_id
  • 15 августа 2016 г.
  • 2. Админка. Стандартный файл modules/bs/admin/bs.admin.php, нужно добавить там категории магазина.
    Основа админки модуля - массив $variables
    Если добавить туда поле, которое есть в основной таблице модуля, и его тип ('type' => 'text' поле, 'type' => 'checkbox' галка, 'type' => 'editor' визуальник, 'type' => 'date' календарик, 'type' => 'numtext' числа, и пр.) оно сразу оформится в админке и будет работать на сохранение.

    Собственно, это все описано в доках http://www.diafan.ru/dokument/full-manual/examples/new-field/

    Если поле требует не просто ячейки, а каких-то операций, его можно описать функцией.

    Если функция системная, она подтянется из adm/includes/edit_functions.php, например, называя поле site_id и указывая его тип 'type' => 'function', выполнится функция edit_variable_site_id(), которая выведет список страниц сайта.

    Если функции нет, и мы что-то совсем левое хотим, весь алгоритм работы поля можно определить прям в modules/bs/admin/bs.admin.php.
    То есть, мы добавляем FFFF в $variables и хотим на это поле что-то свое повесить. Тогда мы ниже просто приделываем функцию edit_variable_FFFF() и пишем в ней что хотим, любой алгоритм.

    Есть системные названия внутренних функций, для переопределения стандартного поведения системы.
    edit_variable_ПЕРЕМЕННАЯ - изменение редактирования любого поля модуля
    list_variable_ПЕРЕМЕННАЯ - изменение вывода любого поля в списке модуля
    save_variable_ПЕРЕМЕННАЯ - поменять алгоритм сохранения любого поля.
    и пр.
    Тут надо внимательно прочитать http://www.diafan.ru/dokument/full-manual/developers/admin/module/ и один примерчик http://www.diafan.ru/dokument/full-manual/examples/new-admin/

    Я не знаю, насколько нужно отступать в теорию, насколько Вы знаете основы. Объяснять сначала их, или сразу говорить, что нужно использовать в данном случае. Хотя лучше было бы, если бы задавались предметные вопросы, почему тут так, и почему тут эдак.

    Возвращаясь к задаче, нужно добавить в $variables переменную cat_shop_id типа function и описать её в баннерах, где запрашивать категории магазина и выводить их списком. Система сама сохранит их в БД
  • 15 августа 2016 г.
  • 3. Третий шаг - фильтровать вывод баннеров на сайте, согласно цифрам ID категорий из БД. Это уже не сложно.
    Это modules/bs/bs.model.php
    Функция show_block()
    Там запрос SELECT , где сейчас отбираются только те баннеры, которые прикреплены к текущей странице
    Код
    ....
    AND (r.site_id=%d OR r.site_id=0)
    ...


    (кстати, надо объяснять, что такое %d в запросе?)

    Сюда нужно только добавить
    Код
    ....
    AND (r.cat_shop_id=%d OR r.cat_shop_id=0)
    ...

  • 11 августа 2016 г.
  • Хотелось бы обратиться по имени, а не "СОФТ", ну да ладно.
    Так вот. Это все вопросы минутные, вишлист тут не причем особо, можно просто задавать вопросы в ТП, для того она и существует. "А как мне сделать так, чтобы по кнопке выбрать из ранее загруженных были все картинки из всех модулей?" и сразу получить ответ.
    Мы же не дебилы, мы всё понимаем и учитываем, руководствуемся логикой. Модуль обработки изображений для всей системы один, все картинки хранятся в одной базе, но имеют признаки, из какого они модуля. Мы предусматривали возможность использовать все картинки из всех модулей, это действительно делается одной "перемычкой" в запросе в надмодуле "Изображения". /modules/images/admin/images.admin.action.php
    Функция
    Код
    /**
    * Подгружает изображения для выбора
    *
    * @return void
    */
    private function view()

    Там два запроса, на $count (для пагинатора) и $rows (для фоток),
    Уберите AND i.module_name='%s', и за кавычками $module_name, и все.

    Мы изначально делили картинки по модулям, так как это будет та самая свалка, открываешь товары, а там фотки из новостей, статей, файлов, форумов и пр. И наоборот, для новостей открывается 100500 фоток товаров. Зачем это надо?
    Не, ну если надо, вопрос минуты. Да какой минуты, 10 секунд.
  • 11 августа 2016 г.
  • Охереть, какая железобетонная, убрать AND i.module_name='%s' в запросе
    Код
    SELECT i.* FROM {images} AS i"
    .$inner
    ." WHERE i.trash='0' AND i.image_id=0 AND i.module_name='%s'

    /modules/images/admin/images.admin.action.php
    Вы если некомпетентны, в архитектуре не разбираетесь, не острили бы.
    А если разбираетесь, но просто провоцируете, то Ваши сообщения можно расценивать как разжигание бессмысленного флейма, за что я тоже буду банить.
  • 11 августа 2016 г.
  • Цитата
    А не нужно фамильярничать, у Вас же серьёзная, уважающая клиентов и партнёров, организация?
    Как раз таки высшая степень уважения к клиенту, это обращение к нему по имени. В любом банке так, агентствах элитной недвижимости, в отелях, бизнес-классе самолетов и пр.
    Цитата
    это когда галочка в админке и список с выбором. Мы же про CMS?
    А мне как с Вами разговаривать? Как с секретаршей Зиночкой, или как с квалифицированным партнером разработчиком? Тогда про галочку я или соглашусь или нет.
    Хотя раньше я озвучивал не раз нашу идеологию: галочки мы выносим в том случае, если в ней есть потребность, то есть нужно включать/выключать. Если какой-то алгоритм работы системы не требует постоянных переключений, очевиден, логичен и им пользуются 98% пользователей, галочка не нужна точно.
    Цитата
    "Разрешить использовать изображения из галереи"

    До сегодняшнего дня этот вопрос не всплывал вообще никак, ни в каком виде, ни от кого. Из чего можно сделать вывод, что всех всё устраивало.
    Если Вас не устраивает алгоритм фильтрации ранее загруженных фотографий по модулям, делайте предложение в вишлисте. Поддержит Вас толпа пользователей, сделаем мы
    Цитата
    Уберите AND i.module_name='%s', и за кавычками $module_name, и все.
    в коробку, делов-то...
  • 11 августа 2016 г.
  • Цитата
    Именно галочек то и не хватает. Контент менеджер, или домохозяйка, не будет править запрос и лезть в исходники. Сайты на диафане для кого делаются? для программистов или для людей?

    Да нафиг это людям не надо! Чё за бред-то? Получает клиент сайт, и ему потом надо пойти в какую-то настройку, чтобы один(!!!!!!!) раз перед использованием сайта включить какую-то вонючую галку!? Фантастический бред!
    Цитата
    Контент менеджер, или домохозяйка, не будет править запрос и лезть в исходники.
    Да! Не будет! И не должен лезть, это работа программиста!!!
    Сайты на Диафане делаются программистами(!!!!!) и для людей(!!!!!)!!!
    Нормальный программист узнает потребности клиента, меняет за 10 секунд нужные параметры в простом легком лаконичном коде и сдает чистый удобный настроенный сайт! Всё!!!! Какая нахрен галка???
    Это Ваш первый в жизни сайт, что ли?
  • 10 августа 2016 г.
  • А разработчик-то тут причем? Это же ЧПУ страницы из админки сайта, правится в "Дополнительные параметры" за секунду. Можно просто стереть старое и система новое сама сгенерирует
  • 10 августа 2016 г.
  • Там по веб-студиям просто рассылка проводится, далее уже кто как договорится.
    Но этого партнера уже прижучили, статус сняли, так что шаблон ему оплатить придётся. Ну а лицуха тоже никуда не денется.
    А заставить партнера доделать работу мы не заставим, конечно, тут деваться некуда.
    Но отзыв влепить надо
  • 10 августа 2016 г.
  • Доброго программирования, коллега!
    По настоящему феншую нужно работать с таблицей цен. Проще всего, присобачить в таблицу еще несколько полей price1, price2, price3 и пр., (и еще проще, чтобы 1, 2, 3 - были id из менюшки городов, чтобы не париться).
    Затем добавить этих полей в modules/shop/admin/shop.admin.php - тут не сложно
    И затем уже копаться с их фильтром и выводом в зависимости от города на сайте
  • 10 августа 2016 г.
  • Цитата
    Добавить характеристику Город (будет влиять на цену, соответственно и остатки товара), а куками определять фильтр товара по характеристике Город.

    Всё, я увольняюсь по причине собственной некомпетентности!
    Тезка, Вы не против, если я за советом буду обращаться к Вам?
  • 10 августа 2016 г.
  • Антон, Вы, наверное, немного смещаете смысл понятий "модуль" в более привычную Вам сторону. Согласен, понятие немного многозначное и в некоторых других CMS имеет иной смысл, нежели в DIAFAN.CMS
    Цитата
    используются несколько модулей? Почему в админке можно прикрепить только 1 модуль? Где логика?
    Что значит "используется несколько модулей"? Наверное, "несколько частей модулей"? Несколько последних новостей из модуля новости, форма из модуля обратной связи, несколько товаров из модуля магазин? При таком раскладе именно к этой странице вообще может быть не подключен ни один модуль, а она может быть собрана из тех самых блоков нужных модулей.
    Но каждый из модулей должен сидеть на одной странице сайта, как прибор в розетке. Вы же не можете на кухне засунуть блендер, миксер и тостер в одну и ту же розетку? Вы подключаете к сети каждый прибор отдельно, а затем уже на рабочем столе используете их как хотите.
    Для организации сайта использовать можно кучу разных инструментов, которые позволяют огранизовать любое управление менеджеру.
    Все зависит от задачи. Если обрисуете, что конкретно нужно сделать, Вам посоветуют инструмент.
  • 10 августа 2016 г.
  • Это не совсем так. Вернее, совсем не так.
    Цитата
    Видете ли так сложилось что модуль это очень плотно интегрированый в общую архитектуру код и он очень сильно засивисим от ядра и бывает даже от других модулей.

    Так скажем, у нас есть ядро, и есть наши модули, которые в это ядро сильно встроены, согласно определенному API. То есть, чтобы сделать простой модуль, который будет управляться системой, выводиться в админке в виде списков , сохраняться в БД и т.д., грубо говоря достаточно сделать /bebe.admin.php и описать в массиве variables нужные поля
    Код
    /**
    * @var array поля в базе данных для редактирования
    */
    public $variables = array (
    'main' => array (
    'name' => array(
    'type' => 'text',
    'name' => 'Название новости',
    'help' => 'Используется в ссылках на новость, заголовках.',
    'multilang' => true,
    ),
    'created' => array(
    'type' => 'datetime',
    'name' => 'Дата',
    'help' => 'Вводится в формате дд.мм.гггг чч:мм. Если указать будущую дату, новость начнет отображаться с этой даты.',
    ),

    и всё. Всё! То есть, написать новый модуль под DIAFAN.CMS - это минута дела.
    За эту простоту приходится платить в других местах.
    Однако, это не отменяет того, что модулем может быть что угодно, откройте "Перелиинковку" или "Онлайн-консультант". В коде своего модуля можно использовать свободный код и любое свободное подключение к БД и другой инфе.
    Однако и подлючать такой модуль (или модули) можно будет не выпадалкой под страницей ("Подключить модуль" - она только для тех, ядровых модулей), а тегами, в любом месте любой страницы, хоть в шаблоне, хоть в админке прямо в визуальнике.

    Цитата
    создать более менее нормальный модуль для Diafan.CMS это адский труд

    Это Вы говорите о модуле, который меняет или дополняет штатные алгоритмы штатных модулей и ядра. Присобачить к системному модулю что-то свое, чтобы оно не затерлось автообновлением.Тут сложности есть, но они тоже решаемы.
    А независимых модулей, работающих по своему усмотрению наклепать можно сколько и как угодно.
  • 10 августа 2016 г.
  • Цитата
    многие пытаются продать продукт заявляя что данным решением может управлять и домохозяйка. А это действительно так просто? Нет нет нет и ещё раз нет. Без поддержки умелого разработчика - любой проект рано или поздно обречён на провал.

    Нашим решением может управлять и домохозяйка и этому тысячи подтвержений.
    А обречен на провал проект, которым занимался неквалифицированный разработчик, "поддержка" которого для проекта требуется постоянно, с подкладыванием новых и новых костылей
  • 10 августа 2016 г.
  • Цитата
    Админка в помойку превращается
    ну как и в плагине, который был указан для WP. Нахерачьте в нем 100 блоков, будет то же самое.

    К тому же, 100 динамических блоков херачить надо, когда они все отличаются друг от друга! То есть, когда есть 20 страниц, на каждую надо 5 блоков и каждый находится не там, где остальные 99, в разной верстке и местах! То есть, речь идет о совершено разных страницах сайта и на сайте УЖЕ есть помойка из свалки шаблонов.

    А когда мы говорим про нормальный сайт, где нормальная продуманная структура, когда есть блок под контентом, слева два, справа три и они всегда на этом месте, но отличаются содержимым, на одной странице "обращение директора", на другой "речь партнера", или на одной странице "5000 скважин" а на другой "5млн долларов налогов", тогда достаточно 6 динамических блоков.

Новости

  • 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-атаку.