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

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

  • 15 июня 2018 г. , редакция: 1529011147
  • Лучше создать если нет в теме блок scrpit.php и вставить его через show_include. Изменяя системный show_js, мы осознанно отказываемся от системных обновлений в этом файле.

    /themes/blocks/script.php -> <insert name="show_include" file="script">
  • 20 марта 2018 г.
  • Данные для этих 40 карточек берутся из той же модели что и список товаров => всё данные для списка и для карточки одни и те же просто по разному показываются. Там нет этих 40 дополнительных запросов.
  • 22 марта 2017 г.
  • В Twig нельзя но в Vue.js можно делать вот так
    Код
    <div v-if="date" class="date">{{ date }}</div>

    на PHP
    Код
    if(!empty($row['date'])) { echo '<span class="date">'.$row['date'].'</span>'; }

    С шаблоном код пишется легче, он остается валидным "HTML" разметкой, а не лапшой из echo => легче ориентироваться, меньше писать текста (это радует особенно когда это ежедневная рутина) трудней забыть какой-нибудь закрывающий тег, редакторы могут автоматически отформатировать разметку, легче внести изменения в верстку.

    Вы ещё скажите что в своей работе не используете автодополнение кода, сниппеты и автоматическое форматирование ) К хорошему привыкаешь быстро и потом без него уже не можешь )
  • 24 марта 2017 г.
  • Это надо в предложения писать, я лишь генерирую гениальные идеи ) Очередная бессонная ночь https://github.com/Garik-/gulp-vue2php и мы выяснили что Open Source это очень хорошо. Оказалось что Vue.js использует собственный парсер, который удалось "прикрутить", остается написать логику :)
  • 22 марта 2017 г. , редакция: 1490183111
  • Очень давно занимаюсь созданием шаблонов под diafan.CMS, поэтому решил отдохнуть от PHP и окунутся в мир JS front-end разработки.
    Ознакомившись с текущими трендами, поработав с Webpack, Gulp и Vue.js теперь не представляю как жил до этого раньше :)

    Но пора было вернуться в 2007 (сентябрь горит) и продолжать кодить шаблоны на PHP и первое с чем я не смог смерится - как же муторно закрывать все эти кавычки и расставлять точки.

    на Vue.js
    Код
    <a :href="row.link">{{ row.name }}</a>

    на PHP
    Код
    echo '<a href="'.$row['link'].'">'.$row['name'].'</a>';

    Вывод напрашивается сам собой использовать шаблонизатор. Загуглив "most popular php template engine" выбор пал на Twig, потому что он развивается и поддерживается сообществом разработчиков Symfony.

    Первое, что я сделал это внедрил шаблонизатор прямо в CMS https://github.com/diafan/twig-plugin
    Всё работает все хорошо, но подумалось о быстродействии данного решения, посмотрев файлы которые генерирует Twig как-то они мне не понравились
    Код
    // line 4
    $context['_parent'] = $context;
    $context['_seq'] = twig_ensure_traversable((isset($context["rows"]) ? $context["rows"] : null));
    foreach ($context['_seq'] as $context["_key"] => $context["row"]) {
    // line 5
    echo "\t\t<a href=\"";
    echo twig_escape_filter($this->env, (twig_constant("BASE_PATH_HREF") . $this->getAttribute($context["row"], "link", array())), "html", null, true);
    echo "\" class=\"item\">

    При создании шаблонов я использую SASS (препроцессор CSS) и собираю его в Gulp, так почему бы не создать препроцессор Twig => PHP в виде плагина для Gulp?
    Пошерстив npm были найдены готовые решения, но они просто прогоняли шаблоны через Twig и на выходе мы получали теже скомпилированые страшные файлы, причем для этого создавались отдельные системные потоки PHP в общем жуть.

    Было принято решение писать плагин самостоятельно на родном для Gulp языке, за ночь родился этот монстр https://www.npmjs.com/package/gulp-twig2php
    Здесь https://diafan.github.io/gulp-twig2php/ в режиме онлайн вы можете поиграться с трансляцией шаблонов в PHP :)

    Плагин сыроват и сейчас обходит боевую обкатку на реальных проектах, так что при багах пишите Issue и не забывайте обновляться `npm update`.
  • 24 марта 2017 г. , редакция: 1490305363
  • Этот ответ так же посвящается Любимову Павелу. Плагин для Gulp работает на локальной машине, на локальной машине Вы пишете шаблон - он на локальной машине транслируется в нативный PHP и этот нативный PHP попадает на FTP. Нам не нужно быть зависимым от библиотеки, потому что мы получаем на выходе чистый код :) Вот тут инструкции по установке и пример настройки https://github.com/Garik-/gulp-twig2php

    Из мира JS могу привести пример библиотека Babel ты пишешь код по современным стандартам она транслирует его в поддерживаемый большинству обозревателей стандарт. На сервере для всех, на локалке круто с синтаксическим сахаром и новыми плюшками для тебя :)

    Сейчас вот например делал второй уровень в шаблоне меню - играться онлайн можно здесь https://diafan.github.io/gulp-twig2php/
    Код
    {% if row.children %}
    <ul class="aside__list__popup">
    {% for popup in result.rows[row.id] %}
    <li class="aside__list__popup--item"><a href="{{ popup.link }}">{{ popup.name }}</a></li>
    {% endfor %}
    </ul>
    {% endif %}

    пишется быстро, верстку сразу видно, можно использовать автоформатирование. на выходе имеем код с кучей точек $ и закорючек :)
    Код
    if($row['children']) {
    echo '<ul class="aside__list__popup">';
    foreach ($result['rows'][$row['id']] as $popup) {
    echo '<li class="aside__list__popup--item"><a href="' . $popup['link'] . '">' . $popup['name'] . '</a></li>' ;
    }
    echo '</ul>';
    }

    ^ c отступами это смотрится красивей, форум съедает...

    Идея была в общем такая ) Надо обкатывать на реальных проектах ) Пока всё очень сыровато )
  • 24 марта 2017 г. , редакция: 1490310317
  • На Vue.js это бы смотрелось ещё красивей
    Код
    <ul v-if="row.children" class="aside__list__popup">
    <li class="aside__list__popup--item" v-for="popup in result.rows[row.id]"><a :href="popup.link">{{ popup.name }}</a></li>
    </ul>

    Но это разные технологии, шаблонизаторы работают с текстом используя лексические анализаторы, а Vue.js с DOM деревом непосредственно в обозревателе, ему легче. Хотя... http://php.net/manual/ru/book.dom.php, https://github.com/vuejs/vue/tree/dev/src/compiler/parser но это уже совсем другая история :)
  • 24 марта 2017 г.
  • Ну лично я люблю стандарты, придерживаясь стандартов проще поддерживать большой проект в котором принимает участие не один человек. Например мне очень нравятся миксины из bootstrap отвечающие за адаптивность https://v4-alpha.getbootstrap.com/layout/overview/#responsive-breakpoints - по коду сразу видно какие стили к какому разрешению относятся и нет всяких извратов типа 438px 342px которые бывают придумывают верстальщики непонятно зачем и для каких устройств.
    В том же Google вообще придумали свой язык Go что бы программисты не писали всякую отсебятину :)
  • 22 марта 2017 г. , редакция: 1490179675
  • Возможно все. Посмотрите исходный код includes/image.php там реализован интерфейс ImageInterface. Различные обработчики изображений лежат в папке includes/image а за выбор библиотек отвечает класс DEFAULT_IMAGE_FACTORY в файле includes/image.php (надо бы реализовать выбор библиотеки в параметрах сайта).

    По сути что бы создать новый обработчик нужно реализовать класс наследующий интерфейс ImageInterface и прописать его подключение в DEFAULT_IMAGE_FACTORY

    В вашем же случае если это консольные утилиты, которые только оптимизируют картинку, можно добавить в самый конец методов класса Image системный вызов, например resize(...) { ... system("jpegoptim $src_image --strip-all"); }
  • 08 февраля 2016 г.
  • Потому что ключа help может не существовать в природе (не инициализирован) тогда PHP выдает warning Undefined variable. По хорошему проверять наличие ключей в массиве нужно функцией array_key_exists, она проверяет лишь наличие ключа. empty же проверяет как наличие ключа так и наличие данные отличных от 0 null или false, но спорить о быстродействии интерпретируемых языков программирования, как минимум не рационально :)
  • 21 сентября 2015 г. , редакция: 1442820930
  • Самый лучший вариант это двигать не body а вложенный слой. Обычно ведь верстается body > #wrapper, вот в файле modules/useradmin/js/useradmin.js подправить вместо $("body").css("padding-top", height + "px"); двигать вложенный слой. Второй вариант быстро решить эту проблему использовать костыль в виде !important. Тогда строчка в useradmin.js будет выглядеть как $("body").attr("style", "padding-top: "+ height + "px !important");

    В старом коде modules/useradmin/js/useradmin.js 2 места где изменяется стиль body, в событии на нажатие режима редактирования и в функции show_panel
  • 15 июля 2014 г. , редакция: 1405402565
  • Регулярки, регулярочки. Есть сервис полезный http://rubular.com/r/WfWhTAoquR

    .*/shop/(d+?)$ - справедлива для site.ru/shop/5
    .*/(d+?)$ - справедливо для всего что заканчивается на /цифра

    По поводу mod_rewrite.
    Сейчас у нас в htaccess такое

    RewriteRule ^(&*)(.*)$ index.php?rewrite=$2 [QSA]

    Перед ним добавляем
    ^(&*)(.*)/(d+?)$ index.php?rewrite=$2/page$3 [QSA]

    Попробуйте :)
  • 04 декабря 2013 г.
  • Илья уже говорил можно грузить просто другой шаблон например if(isset($_GET['ajax'])) в shop.php можно посмотреть в какой переменной шаблоны лежат. Тему страницы тоже можно менять динамически (если мне не изменяет память print_r($this));

    И получится по ?ajax - один шаблон без него стандартный... выводи в модальное окно и все.
    По поводу не хочу вываливать все товары в странице списка, ну а допустим медленное соединение у людей, через планшет смотрят... каждый раз подгружать AJAX а если он обратно пролистнул... тут надо делать что-то умное типа 5 товара в кеше - окно... туда сюда матаем подгружается :) чтоб без тормозов...

    Мне кажется вывести данные всех товаров на странице списка - не так уж и жестоко... если их не больше 10 конечно...
  • 26 ноября 2013 г.
  • «Ты начинай программировать, а мы пока подумаем, что писать в ТЗ»
    «У нас дизайн еще не готов, Вы пока возьмите любой что бы сайт главное запустить, а как будет готов — шустро оденете новый, но на сроках это сказаться не должно, иначе Вы нас подведете»
    «У моей секретарши племянник, в школе делал сайт, вот он говорит вы всё не правильно делаете и денег много просите и вообще всё можно было сделать за пару дней на Joomla»
    «Да нет… зачем все расписывать? Когда вы все сделаете, мы потом посмотрим и скажем вам, что не так»
    «Сделай мне несколько вариантов, я выберу что мне понравится»
    «Как сделаешь я гляну и скажу что мне не нравится» (с) Алексей :)
  • 28 ноября 2013 г.
  • В начале своего пути (примерно лет 7 назад), с товарищем boston и svolota (который без формата), тоже привлекался на некий проект на Joomla бюджетом 100 тыс руб, что-то вроде портала недвижимости было. Вероятно это совпадение.
  • 27 февраля 2014 г. , редакция: 1393498358
  • С меня идея, с вас программный продукт. Деньги пополам.
    > бюджет 8 т.р.
    > сделать надо, как можно быстрее
  • 26 ноября 2013 г.
  • В последних версиях существует таблица shop_cart, в которые данные как раз попадают, когда пользователь кладет товар в корзину. Вот по сути и ответ на Ваш вопрос - записывать данные о товарах в корзине в таблицу БД.
  • 26 ноября 2013 г. , редакция: 1385465444
  • Из анналов (не путать с аналом)
    Дано
    Есть магазин. Есть товары. Есть характеристика "список с выбором нескольких значений", которая к тому же зависима от цены.
    Задача
    Вывести заданную характеристику (название и значение) и ОДНУ ее цену в блоке магазина.
    Решение
    shop.view.show_block.php
    Код
    <?php
    getPrice(array("row" => &$row, "result" => &$result),1); // вывести цену и описание только первого параметра



    function getPrice(array $r,$param_id)

    {

    if (empty($r["row"]["price"]) && empty($r["row"]["price_arr"]))

    return false;



    if(!empty($r["row"]["price_arr"]))

    {

    foreach($r["row"]["price_arr"] as $price)

    {

    foreach($price["param"] as $param)

    {

    if($param["id"] == $param_id)

    {

    foreach ($r["result"]["depends_param"] as $_param)

    {

    if($_param['id'] == $param_id)

    {

    echo '<p>'.$_param['name'];

    foreach($_param['values'] as $v)

    {

    if($v['id'] == $param['value'])

    {

    echo ' '.$v['name'];

    break;

    }



    }

    echo '</p>';

    break;

    }



    }



    if(!empty($price["old_price"]))

    echo '<span><del>'.$price["old_price"].' '.$r["result"]["currency"].'</del></span><br/>';



    echo '<span>'.$price["price"].' '.$r["result"]["currency"].'</span>';

    return true;

    }

    }

    }

    }

    }


    ^ ужос
  • 09 июля 2012 г. , редакция: 1341833732
  • Открыть файл shop.php найти там функцию init
    и прописать после

    $this->rewrite_variable_names = array('page', 'show', 'cat', 'sort', 'param');
    $this->diafan->rewrite_variable_names = $this->rewrite_variable_names;

    строку
    if(empty($this->diafan->sort)) $this->diafan->sort=1;


    P.S это работает только в каталогах - нужно править SQL запросы в shop.model.php функция first_page, по аналогии с _list, что бы это работало и на первой странице.
  • 04 июля 2012 г.
  • "Переделка" эта масштабная. Конечно нет ничего не возможного.
    Фотографии добавляются в таблицу images, функции по работе с бд есть в файле photo.admin.php (upload_images).
    Можно сделать из нее ajax обработчик, но конечно тут нужно подходить с умом. Например простая форма <input type="file"> это одно, совсем другое drag&drop + множественная загрузка фотографий.
  • 02 июля 2012 г.
  • Попробуйте скопировать функции из 5 версии /includes/model.php show_path /includes/function.php show_path
    конечно не уверен что поля в бд будут одинаковые, но изменения как раз затрагивали эти функции.
  • 25 июня 2012 г.
  • В init можно объявить $this->rewrite_variable_names это переменные которые будут поступать из url
    Весь список возможных переменных задается в файле /includes/init.php

    public $rewrite_variable_names_all = array('cat', 'param', 'show', 'page', 'year', 'month', 'day', 'step', 'sort', 'add', 'edit');

    Смысл таков - site.ru/module/show2 $this->diafan->show = 2

Показывать по:

Новости

  • 18 июня, вторник
  • В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
  • 24 апреля
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 

Форум