Дмитрий Кондин

Администраторы
  • Публикации

    6524
  • Зарегистрирован

  • Посещение

  • Days Won

    362

Изменения репутации

  1. Like
    Дмитрий Кондин получил репутацию от Chernetskiy в Предложения для будущих версий.   
    Думаю надо сделать отдельную ветку в форуме.
    Там будет каждая новая фича отдельным топиком. Если пользователю интересна эта фича, то он там пишет +1, в результате тема которая интересна большему количеству появится в новой версии.
  2. Like
    Дмитрий Кондин получил репутацию от Doka в Вопросы по теме!   
    Язык тут
    <a class="btn btn-success btn-small dropdown-toggle" data-toggle="dropdown" href="#">{$smarty.session._lang} <span class="caret"></span></a> <ul class="dropdown-menu"> {foreach item=ln from=$available_langs key=k} {if $smarty.session._lang eq $k} {else} {/if} <li><a href="{$smarty.const.SITEBILL_MAIN_URL}/?_lang={$k}">{$ln}</a></li> {/foreach} </ul> Вместо него можете поставить вконтакте.
  3. Like
    Дмитрий Кондин получил репутацию от Doka в Обновление system 2.8.4   
    1.       Уведомление админа о платежах
    2.       Установка степени прозрачности для водяных знаков (100 – не прозрачно, 0 – полностью прозрачно)
    3.       Исправлена функция удаления категорий в редакторе структуры
    4.       Исправлена функция наложения водяных знаков для картинок из нового загрузчика uploads
    5.       Выдача 404 ошибки для объявлений со статусом «Не опубликовано»
    6.       Локальная форма для входа (для локальной формы нужно создать файл local_login_form.tpl)
    --------------
     
    Смельчаки, обновляйтесь!
    И пишите баг-репорты, будем править.
  4. Like
    Дмитрий Кондин изменил репутацию abushyk в Приложения   
    Excel Free - обмен данными внутрь-наружу сайта из\в формат Excel
     
    GeoData - приложение для работы с картографией - вывод элемента типа geodata  в формах, геокодинг принудительный и на лету.
     
    Mailbox - посылка и прием сообщений с карточки на автора-владельца объявления
     
    RSS новостей сайта - выгрузка новостей и объявлений в rss-потоки для рсс-читалок
     
    SEO-Оптимизация - приложение для работы с видами отображений урлов+малеха дополнительный автоопраций
     
    SiteMap - карта сайта, ее генератор в xml (кажется)
     
    TLocation - специфичній єлемент для работы с геоданными(страна, город, регион) в виде единого комплекса. Не совместим с некоторыми приложениями. Подлежит эвтаназии.
     
    Авторизация через соц.сети - как следует из названия. Кажется в следующем обновлении будет доступна авторизация по ВК, ОК, ФБ, гугль и твиттер аккаунтам
     
    Баннеры - приложение для создания кусков разметки-баннеров, расставив метки которых в шаблоне, можно получить их отображение. Что-то типо модуля HTML-огрызка из Джумлы.
     
    Выгрузка Яндекс.Недвижимость - приложение для выгрузки объявлений и их параметров в формат Yandex.Недвижимость
     
    Галерея - организация альбомчиков картинок
     
    Заявки на аренду - сборщик зхаявок клиентов связанных с потребностью в аренде. Типа как подача объявления, только вместо объявления заявка.
     
    Клиенты - квазиуниверсальный сборщик самых разнообразных заявок+автоформирователь и обработчик произвольных форм на основе модели из Редактора Форм
     
    Менеджер валют - коллектор настроек связанных с валютой цены
     
    Менеджер настроек - Settings
     
    Новости - управление новостями
     
    Обновления - центр обновлений системы. отображает, что можно обновить и в каком состояниии в данный момент находятся приложения.
     
    Редактор форм - сердце сайтбилля)
     
    Редактор шаблонов - для тех, кто не освоил фтп и человедружественный редактор файлов есть возможность быстро и сердито подправить шаблончик. Очень ограничен в правах доступа к файлам даже в папке шаблона. Не говоря уже о том, что выше ее вообще не пустит.
     
    Статичные страницы - Некие странички, меняющиеся раз в сто лет и которые редко кто читает - типа лицензионного сообщения, хотя могут быть варианты)
     
    Управление кешем - забудьте, что вы его видели. А если еще и включили, то выключьте)
  5. Like
    Дмитрий Кондин изменил репутацию XTRO в Рекламные баннеры sitebill   
    почитать ветки форума, воспользоваться поиском, ознакомиться с wiki
    например http://www.etown.ru/s/topic/352-%D0%B1%D0%B0%D0%BD%D0%B5%D1%80-%D0%BD%D0%B0-%D1%81%D0%B0%D0%B9%D1%82%D0%B5/
    ознакомиться с видео http://www.youtube.com/user/DMn1c/videos
    уже не раз всё обсуждалось.
  6. Like
    Дмитрий Кондин получил репутацию от Xlebosolniy в Некорректно работает watermark   
    Несколько меню? 
    Поясните - вам нужно добавить внизу еще одно меню с другими пунктами, или добавить в существующее меню дополнительные пункты?
  7. Like
    Дмитрий Кондин изменил репутацию abushyk в Монетизация с помощью списков просмотров   
    Суть
     
    Разрешить просмотр контактных данных объявления для пользователей, которые подключили и оплатили некоторый список просмотра (СП). Список просмотра регламентирует количество дней на протяжении которых доступен просмотр контактов и стоимость данного периода.
    Подключение СП проходит через раздел Личного кабинета (ЛК), а оплата списка производится из ЛК посредством Робокассы.
    Намеренно исключаю возможность задания СП при регистрации, когда вместе с регистрационными данными пользователь должен выбрать конкретный вариант СП, что бы унифицировать процедуру пользования СП для обычных пользователей и пользователей регистрирующихся через соцсети.
    Пример будет приведен на базе шаблона realia, но для любого другого шаблона принцип будет аналогичен.
     
    Приницип работы
     
    При загрузке страницы происходит извлечение СП для текущего пользователя. Если есть в наличии хоть один активный для данного момента времени СП в переменную сессии сохраняется состояние "открыто". Этот параметр проверяется в местах, где необходим вывод контактны данных и средствами шаблона принимается решение - выводить или скрыть блок с контактными данными.
     
    Задействованные приложения
     
    registersms - приложение используется формально. Находится в выключенном состоянии и служит для хранения настроки соотношения периода СП и цены за этот период. В принципе не критично и может быть реализовано отдельной настройкой
    watchlistmanager - приложение-хранилище функционала для работы СП. Должно быть, быть включенным и установленным.
    настройки Робокассы - must have
     
    Необходимые файлы
     
    Набор вспомогательных файлов можно скачать тут
    Файлы в архиве расфасованы согласно структуре шаблона. Т.е. то, что находится в папке main должно лечь в папку main вашего шаблона etc.
     
    Изменения
     
    В файле main.php
     
    Внутри class frontend_main extends SiteBill_Krascap {...} добавляем функцию getViewOptions, которая загружает СП для пользователя. Код функции копируем из http://pastebin.com/8rMZNU4U
     
    В функции main() производим вызов вставленной выше функции и загрузку цен на СП из конфигурации. Общий код изменений тут
    Блок А вставляем после строк
    $work_subcontroller='';$has_result=false;$undetected_url=false; Блоком Б заменяем блок
    if ( !$has_result && preg_match('/\/robox/', $_SERVER['REQUEST_URI']) ) {...} Блоком В дополняем ветвистость 
    if ( preg_match('/^account\/profile/', $REQUESTURIPATH) ) { перед последним }else{
     
    В файле header.tpl
     
    Добавляем кусочек, заносящий цены в переменные скриптов
    {literal}<script type="text/javascript">var _costs={/literal}{if $_costs ne ''}{$_costs}{else}[]{/if}{literal};</script>{/literal} Блок ставится в любом месте между тегами <head> и </head>
     
    В файле realty_view.tpl
     
    Фактически основные функциональные изменения, которые скрывают контактные данные.
    Находим блок, отображающий контактные данные и обрамляем его конструкцией 
    {if $smarty.session.viewOptions.mode=='opened'}<!--Тут собственно контактные данные-->{else}Оплатите доступ к данным или другая информация{/if} Настройка
     
    Руководящими настройками для работы СП являются настройка цен. Соответствие цен и длительности периодов указывается в переменной Настройки - Регистрация через SMS - Стоимость категорий (apps.registersms.costs_array). Значения задаются в виде строки
    {N1:P1}{N2:P2}{N3:P3}{N4:P4}{N5:P5} - где N- длительность периода. По-умолчанию в днях. Р- стоимость этого периода.
    Например:
    {1:70}{2:100}{3:150} мы предусматриваем открытие просмотров контактов в вариантах на 1, 2 или 3 дня с соответствующими стоимостями 70, 100 и 150 рублей.
     
    Кроме этого места необходимо еще указать допустимые периоды (продублировать) в обработчике СП - /template/frontend/шаблон/main/local_watchlistmanager.php. В этом файле необходимо найти функцию getWLModel() и в ней изменить строку 
    $form_data['period']['grade_values'] = array('1', '2', '3', '7', '31'); где указать наш перечень периодов
    $form_data['period']['grade_values'] = array('1', '2', '3'); Замечание
     
    Шаблон realia оборудован плагином-украшателем ezMark, который, не смотря на свою красивость, доказал несостоятельность при работе с элементами типа radio - кружочки с точечками в форме. Поскольку форма добавления СП использует именно такие элементы, а в остальных формах мы практически не используем их, то рекомендую сузить область работы этого плагина только элементами типа checkbox.
    Для этого в файле /template/frontend/realia/js/realia.js в функции InitEzmark() следует закомментировать строку
    $('input[type="radio"]').ezMark();
  8. Like
    Дмитрий Кондин изменил репутацию abushyk в Видеоблог   
    Суслики - это класс) Живенькое такое)
  9. Like
    Дмитрий Кондин получил репутацию от Xlebosolniy в Улица прописью   
  10. Like
    Дмитрий Кондин изменил репутацию SergeyN в Верхнее меню риелтора   
    Кто ищет, тот найдет. user_menu.tpl
  11. Like
    Дмитрий Кондин изменил репутацию Kamila2014 в Наши питомцы   
    У меня тоже мопсик 2 года моей девочке, ЧАРА зовут) Светлый окрас) И белая кошка по имени КАТЁНКА (знаю смешно но зото оригинально)
  12. Like
    Дмитрий Кондин изменил репутацию Kamila2014 в Кто как расслабляется?   
    Поздняя прогулка в парке перед сном. Хотябы через день... Эффект заметен сразу)))
  13. Like
    Дмитрий Кондин изменил репутацию Chernetskiy в Безопасность сайта   
    У меня .htaccess чуть поболее будет, заодно засунул основные адреса, откуда чаще всего ломают сайты, количество попыток взлома резко сократилось, пожалуй за последний месяц ни одной. Все это работает в увязке с Wordfense в Wordpress:
     
    #WFIPBLOCKS - Do not remove this line. Disable Web Caching in Wordfence to remove this data.
    Order Deny,Allow
    Deny from 176.102.37.60
    Deny from 5.19.234.35
    Deny from 46.118.127.32
    Deny from 184.154.88.18
    Deny from 210.172.144.32
    Deny from 54.254.240.147
    Deny from 213.125.101.59
    Deny from 83.99.139.223
    Deny from 91.202.25.217
    Deny from 188.132.210.36
    Deny from 94.230.163.22
    Deny from 5.166.217.190
    Deny from 88.196.133.245
    Deny from 199.246.2.94
    Deny from 184.82.179.101
    Deny from 209.59.133.206
    Deny from 106.187.102.104
    Deny from 31.25.28.142
    Deny from 91.221.70.208
    Deny from 50.28.80.217
    Deny from 91.200.14.72
    Deny from 85.214.50.184
    Deny from 95.158.48.96
    Deny from 211.110.140.70
    Deny from 146.185.232.226
    Deny from 91.200.13.64
    Deny from 91.207.7.49
    #Do not remove this line. Disable Web Caching in Wordfence to remove this data - WFIPBLOCKS
    #WFCACHECODE - Do not remove this line. Disable Web Caching in Wordfence to remove this data.
    <IfModule mod_deflate.c>
     AddOutputFilterByType DEFLATE text/css text/x-component application/x-javascript application/javascript text/javascript text/x-js text/html text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon application/json
     <IfModule mod_headers.c>
      Header append Vary User-Agent env=!dont-vary
     </IfModule>
     <IfModule mod_mime.c>
      AddOutputFilter DEFLATE js css htm html xml
     </IfModule>
    </IfModule>
    <IfModule mod_mime.c>
     AddType text/html .html_gzip
     AddEncoding gzip .html_gzip
     AddType text/xml .xml_gzip
     AddEncoding gzip .xml_gzip
    </IfModule>
    <IfModule mod_setenvif.c>
     SetEnvIfNoCase Request_URI \.html_gzip$ no-gzip
     SetEnvIfNoCase Request_URI \.xml_gzip$ no-gzip
    </IfModule>
    <IfModule mod_headers.c>
     Header set Vary "Accept-Encoding, Cookie"
    </IfModule>
    <IfModule mod_rewrite.c>
     RewriteEngine On
     RewriteBase /
     RewriteCond %{HTTPS} on
     RewriteRule .* - [E=WRDFNC_HTTPS:_https]
     RewriteCond %{HTTP:Accept-Encoding} gzip
     RewriteRule .* - [E=WRDFNC_ENC:_gzip]
     RewriteCond %{REQUEST_METHOD} !=POST
     RewriteCond %{HTTPS} off
     RewriteCond %{QUERY_STRING} ^(?:\d+=\d+)?$
     RewriteCond %{REQUEST_URI} (?:\/|\.html)$ [NC]
     RewriteCond %{HTTP_COOKIE} !(comment_author|wp\-postpass|wf_logout|wordpress_logged_in|wptouch_switch_toggle|wpmp_switcher) [NC]
     RewriteCond %{REQUEST_URI} \/*([^\/]*)\/*([^\/]*)\/*([^\/]*)\/*([^\/]*)\/*([^\/]*)(.*)$
     RewriteCond "%{DOCUMENT_ROOT}/wp-content/wfcache/%{HTTP_HOST}_%1/%2~%3~%4~%5~%6_wfcache%{WRDFNC_HTTPS}.html%{ENV:WRDFNC_ENC}" -f
     RewriteRule \/*([^\/]*)\/*([^\/]*)\/*([^\/]*)\/*([^\/]*)\/*([^\/]*)(.*)$ "/wp-content/wfcache/%{HTTP_HOST}_$1/$2~$3~$4~$5~$6_wfcache%{WRDFNC_HTTPS}.html%{ENV:WRDFNC_ENC}" [L]
    </IfModule>
    #Do not remove this line. Disable Web caching in Wordfence to remove this data - WFCACHECODE
    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    # END WordPress
  14. Like
    Дмитрий Кондин изменил репутацию vihr в Доработка модуля яндекс.выгрузка   
    тока что 1000 ушла в сторону Димы
  15. Like
    Дмитрий Кондин изменил репутацию taseb в Доработка модуля яндекс.выгрузка   
    Оплатил через яндекс деньги
  16. Like
    Дмитрий Кондин изменил репутацию infected1992 в Доработка модуля яндекс.выгрузка   
    Мне счет не выставили, я скинусь тогда через яндекс.деньги
  17. Like
    Дмитрий Кондин изменил репутацию XTRO в Где увидеть все переменные сайта?   
    а я юзаю
    Smarty Debug Console просто через {debug}
    или для конкретники
    <pre>{$news_list_column|debug_print_var}</pre> или
    {$themeurl|var_dump}
  18. Like
    Дмитрий Кондин изменил репутацию XTRO в Банер на сайте   
    а я, по своей тупости, (ещё до просмотра этого видео) полез приспосабливать для другого , т.к понадобилось сделать рандомный вывод графических custom_банеров в определенном разделе,
    подход использовал аналогичный: хтмл_код - обычная ссылка с картинки, а в имени - осмысленное системное имя для каждого банера (типа right_top_banner1, right_top_banner2, right_top_banner3 ), т.е. отличаются только цифрой, потом в нужном месте темплейта:
    {if $smarty.server.REQUEST_URI|regex_replace:"/\?(.*)/":"" eq '/kommercheskaya'} <div class="custom_banners">                {assign var=tmp_var value = $right_top_banner{rand(1,3)} }                {if $tmp_var}                    {$tmp_var}                {/if} </div> {/if} + добавить учёт кликов и получим миниротатор
  19. Like
    Дмитрий Кондин изменил репутацию XTRO в количество тем в категориях   
    я сделал по другому (всё по аналогии, не совсем кошерно, т.к. дублирование в декораторе, но на скорую руку работает) :
    В темплейте как обычно:
    {$resp_menu} создал \apps\system\lib\frontend\menu\resp_menu.php:
    <?php/** * Resp menu class */class Resp_Menu extends Structure_Manager{    /**     * Constructor     */    function __construct()    {        $this->SiteBill();    }    /**     * Get resp menu     * @param     * @return     */    function get_menu()    {        require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/frontend/menu/menu_decorator.php');        //require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/admin/structure/structure_implements.php');        $SM=new Structure_Manager();        $structure=$SM->loadCategoryStructure();        $data_structure=$SM->load_data_structure(0);        foreach($structure['catalog'] as $cat_point){            $ch=0;            $SM->getChildsItemsCount($cat_point['id'], $structure['childs'], $data_structure['data'][0], $ch);            $data_structure['data'][0][$cat_point['id']]+=$ch;        }        foreach($structure['catalog'] as $id=>$cat_point){            if(!in_array($cat_point['id'], $structure['childs'][0])){                $structure['catalog'][$id]['name']=$structure['catalog'][$id]['name'].' ('.$data_structure['data'][0][$id].')';            }        }        $rs = Menu_Decorator::getMenu('resp_menu', $structure);        return $rs;    }}?> в apps\system\lib\frontend\menu\menu_decorator.php добавил выбор:
    case 'resp_menu' : {                $function_name='getMenu_respmenu';                break;            } и в конец класса:
    private static function getMenu_respmenu($category_structure){        $rs = '<ul class="menu">';        foreach ( $category_structure['childs'][0] as $item_id => $categoryID ) {            if($category_structure['catalog'][$categoryID]['url']!=''){                if ( preg_match('/^http/', $category_structure['catalog'][$categoryID]['url']) ) {                    $rs .= '<li><a href="'.$category_structure['catalog'][$categoryID]['url'].'">'.$category_structure['catalog'][$categoryID]['name'].'</a>';                } else {                    $rs .= '<li><a href="'.SITEBILL_MAIN_URL.'/'.$category_structure['catalog'][$categoryID]['url'].'">'.$category_structure['catalog'][$categoryID]['name'].'</a>';                }            }else{                $rs .= '<li><a href="'.SITEBILL_MAIN_URL.'/topic'.$categoryID.'.html">'.$category_structure['catalog'][$categoryID]['name'].'</a>';            }            $rs .= self::getChildNodes_respmenu($categoryID, $category_structure, $current_category_id);            $rs .= '</li>';        }        $rs .= '</ul>';        return $rs;    }    private static function getChildNodes_respmenu($categoryID, $category_structure, $current_category_id) {        if ( !is_array($category_structure['childs'][$categoryID]) ) {            return '';        }        $rs = '<ul style="z-index: 50">';//TODO move in css //        foreach ( $category_structure['childs'][$categoryID] as $child_id ) {            if($category_structure['catalog'][$child_id]['url']!=''){                $rs .= '<li><a href="'.SITEBILL_MAIN_URL.'/'.$category_structure['catalog'][$child_id]['url'].'">'.$category_structure['catalog'][$child_id]['name'].'</a>';            }else{                $rs .= '<li><a href="'.SITEBILL_MAIN_URL.'/topic'.$child_id.'.html"><span class="no-image">'.$category_structure['catalog'][$child_id]['name'].'</a>';            }            if ( count($category_structure['childs'][$child_id]) > 0 ) {                $rs .= self::getChildNodes_respmenu($child_id, $category_structure, $current_category_id);            }            $rs .= '</li>';        }        $rs .= '</ul>';        return $rs;    } в main.php в main() добавил
            } elseif ( $this->getConfigValue('menu_type') == 'respmenu' ) {                require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/frontend/menu/respmenu.php');                $resp_menu = new Resp_Menu();                $this->template->assert('resp_menu', $resp_menu->get_menu()); Ну, и в \apps\config\admin\config_mask.php, чтобы в админке можно было выбрать тип, заменил на:
    $data_model['menu_type']['select_data'] = array('purecss'=>'purecss','slidemenu'=>'slidemenu','megamenu'=>'megamenu', 'respmenu'=>'respmenu'); css по вкусу. Я юзал KickStart. Правда, этот вариант отработает до очередного обновления .

    Имхо, просто добавить getChildsItemsCount() в виде опции (в конфиге рядом с выбором типа меню в следующих релизах )

  20. Like
    Дмитрий Кондин изменил репутацию XTRO в Memory Usage Information   
    в начало index.php
    $time_start = microtime(true);require('memdbg.php');$m = new MemoryUsageInformation(true); сам класс:
    <?php/* спасибо автору скрипта, к сожадению мне не известному*/class MemoryUsageInformation { private $real_usage; private $statistics = array(); public function __construct($real_usage = false) { $this->real_usage = $real_usage; } public function getCurrentMemoryUsage($with_style = true) { $mem = memory_get_usage($this->real_usage); return ($with_style) ? $this->byteFormat($mem) : $mem; } public function getPeakMemoryUsage($with_style = true) { $mem = memory_get_peak_usage($this->real_usage); return ($with_style) ? $this->byteFormat($mem) : $mem; } public function setMemoryUsage($info = '') { $this->statistics[] = array('time' => time(), 'info' => $info, 'memory_usage' => $this->getCurrentMemoryUsage()); } public function printMemoryUsageInformation() { foreach ($this->statistics as $satistic) { $str = "Time: " . $satistic['time'] . " | Memory Usage: " . $satistic['memory_usage'] . " | Info: " . $satistic['info']; $str .= "\n"; } $str.= "\n\n<br />"; $str.= "Peak of memory usage: " . $this->getPeakMemoryUsage(); $str.= "\n\n<br />"; return $str; } public function setStart($info = 'Initial Memory Usage') { $this->setMemoryUsage($info); } public function setEnd($info = 'Memory Usage at the End') { $this->setMemoryUsage($info); } private function byteFormat($bytes, $unit = "", $decimals = 2) { $units = array('B' => 0, 'KB' => 1, 'MB' => 2, 'GB' => 3, 'TB' => 4, 'PB' => 5, 'EB' => 6, 'ZB' => 7, 'YB' => 8); $value = 0; if ($bytes > 0) { if (!array_key_exists($unit, $units)) { $pow = floor(log($bytes)/log(1024)); $unit = array_search($pow, $units); } $value = ($bytes/pow(1024,floor($units[$unit]))); } if (!is_numeric($decimals) || $decimals < 0) { $decimals = 2; } return sprintf('%.' . $decimals . 'f '.$unit, $value); }} для независимости добавил в main.php перед render шаблона , но по правильному надо в выход:
    // ************************************************// global $time_start, $m; $time_end = microtime(true); $precision = 2; $tr= 'Build time : '. intval(($time_end - $time_start)*pow(10,$precision))/pow(10,$precision).' sec'; $smarty->assign('timerender',$tr); unset($tr); $usemem= memory_get_peak_usage(); $usemem = 'Memory: '. round($usemem/1024/1024,2) . ' Mb'; $smarty->assign('usemem',$usemem); unset($usemem); $smarty->assign('pr_m',$m->printMemoryUsageInformation());// ************************************************// ну и в самом main.tpl перед </body>:
    <div class="dbg">{$timerender} - {$usemem} - {$pr_m}</div>
    можно использовать, как вариант, для замера цикла:
    $m = new MemoryUsageInformation(true);$m->setStart();$a = array();$m->setMemoryUsage("до цикла");for($i = 0; $i < 100000; $i++) { $a[$i] = uniqid();}$m->setMemoryUsage("после цикла");unset($a);$m->setMemoryUsage("после unset()");$m->setEnd();$m->printMemoryUsageInformation(); Осталось притулить sql вывод и получится debug панелька. Хотя лучше всё организовать на уровне хелпера.

  21. Like
    Дмитрий Кондин изменил репутацию alexey в Доработка модуля яндекс.выгрузка   
    а может участвующим предоставить скидку (скажем в размере уплаченного взноса ) на уже существующие платные модули или шаблоны? Раз уж данный модуль появится в следующих версиях и будет доступен тем, кто не вкладывался в его разработку, то это было бы вроде как справедливо, я думаю.
    Но чтоб и разработчик тоже не много терял на таких скидках то скидку давать в каком-то определенном проценте от суммы приобретаемого продукта, например, 20%, 30% или 50% от стоимости продукта.
  22. Like
    Дмитрий Кондин изменил репутацию XTRO в Сравнение HTML5 фреймворков   
    "A Collection of best front End frameworks"
    (Сравнительная таблица со ссылками на разрабов и гитхаб.)
     
    Статья на хабре с описанием 30 решений.
  23. Like
    Дмитрий Кондин получил репутацию от XTRO в Начинаем защищать авторское право   
    http://www.youtube.com/watch?v=2L9_Tmxg5jY
  24. Like
    Дмитрий Кондин получил репутацию от Realtor в Районы и Улицы: Выбор одновременно несколько районов и улиц.   
    Мультивыбора у нас в системе еще нет, будет в обновлениях.
  25. Like
    Дмитрий Кондин получил репутацию от Realtor в Редактирование личного кабинета риелтора   
    Сделал обновления для приложения mailbox, теперь можно удалять личные сообщения.