вторник, 20 августа 2013 г.

четверг, 15 августа 2013 г.

jQuery Download Plugin

http://stackoverflow.com/a/14717637/2564525
The answer mentioning "jQuery Plugin for Requesting Ajax-like File Downloads" got me headed down the right direction, but it didn't work entirely for my situation since I have a complex object and array of objects to pass in as my search criteria/filter data. I figured I'd share my code in case someone else runs into this situation too.
$.download = function (url, data, method) {
    if (url && data) {
        //convert the data object into input HTML fields
        var inputs = '';
        var convertToInput = function (key, keyStr, obj) {
            if (typeof obj === 'undefined') {
                return;
            } else if (typeof obj === "object") {
                for (var innerKey in obj) {
                    if (obj.hasOwnProperty(innerKey)) {
                        var innerKeyStr = '';
                        if (keyStr === '') {
                            innerKeyStr = innerKey.toString();
                        } else {
                            innerKeyStr = keyStr + "[" + innerKey.toString() + "]";
                        }
                        convertToInput(innerKey, innerKeyStr, obj[innerKey]);
                    }
                }
                return;
            } else if ($.isArray(obj)) {
                obj.forEach(function (item) {
                    convertToInput(key, keyStr + "[]", item);
                });
                return;
            }

            inputs += "";
        };
        convertToInput(null, '', data);

        //send request
        jQuery('
+ url + '" method="' + (method || 'post') + '">' + inputs + '
').appendTo('body').submit().remove(); }; }; $.download('/api/search?format=csv', searchData, 'POST');
It probably doesn't make much of a difference, but to provide some context, I've got a javascript and knockout UI calling into WebAPI, MVC4, and nHibernate. The 'format=csv' part of the query string triggers a MediaTypeFormatter to convert the returned models into a CSV file type. If I leave that off, then I get the models back from the API and can populate a Slick grid for display.

вторник, 6 августа 2013 г.

Drupal Questions

Для тех, кто не имеет опыта с web и drupal:
Environment:
  1. Установить Linux. Это может быть Ubuntu, Debian, OpenSUSE, Fedora, Linux Mint. Мы используем Ubuntu.
  2. Установить AMP stack (Apache, PHP 5.3, MySQL, phpmyadmin)
  3. NetBeans 7
Drupal:
  1. Установить Drupal 7 (не из пакетов, a c drupal.org)
  2. Плюсом будет знание о drush и умение его использовать.
Разобраться c темами :
  1. Ноды (node)
  2. Система хуков (hooks)
  3. Система теминга (theme)
  4. Блоки (blocks)
  5. Drupal coding standarts http://drupal.org/coding-standards
  6. Таксономия (taxonomy)
  • Уметь создавать тип материала, добавлять ему поля разных типов.
  • Создавать несколько нод этого типа.
  • Добавлять к ним комментарии.
Познакомится с модулями:
1. http://drupal.org/project/views
Вывести список нод этого материала, отсортированных по количеству комментариев.
2. http://drupal.org/project/panels
Вывести на панели рядом два списка с сортировкой по комментариям в разных направлениях. Попробовать разобраться с ctools плагинами для панелей.
3. http://drupal.org/project/admin_menu
Установить, разобраться зачем он нужен.
Лучшие учебные пособия - drupal.org, php.net

Для опытных:
Как работает веб:
  1. AMP стек, объяснить как работает с момента ввода адреса сайта, до момента полной прогрузки страницы.
  2. Протокол HTTP, Методы Post и Get
Основные вопросы по Drupal
Hook.
  1. Что такое хук, зачем нужны и как используются?
  2. Список наиболее популярные хуков (hook_menu, hook_theme, hook_form_alter, hook_nodeapi, hook_user …)
  3. Как создать свой хук?
  4. hook_theme, для чего используется? Как его можно использовать? Куда ложить файлы шаблонов? Как именовать препроцессы?
  5. hook_menu, как создать свой меню итем? Основные правила при создании меню итема. Когда нужно выносить коллбэк в отдельный файл. Какие типы меню итемов бывают?
  6. hook_views_* - основные хуки, как и для чего используются?
  7. hook_schema - что такое, зачем нужен, пример
  8. hook_update - правила написания, как работает
  9. hook_install, hook_uninstall - зачем использовать, примеры
  10. menu в drupal, как это работает?
Coding standards.
  1. Правила именования модулей, функций, файлов модулей.
  2. Drupal coding standards, основные моменты
  3. db_query(), db_select() и другие функции для работы с БД, основные правила.
  4. Когда нужно создавать свой модуль?
Forms.
  1. Как создать форму?
  2. Как отрисовать форму программно?
  3. Как изменить чужую форму?
  4. Типы элементов, основные свойства.
  5. Теминг формы
  6. validate, submit, after_build, pre_render формы.
  7. System settings forms
  8. AHAH. Что такое, как использовать?
Content
  1. Content-type - что такое? как создать? основные правила создания
  2. Fields - типы полей, правило именования
  3. Build mode - что такое и как это использовать?
  4. Как друпал хранит поля в базе
Views.
  1. Зачем нужен? Примеры использования
  2. Типы дисплеев, типы шаблоны, стили.
  3. Что такое relationship во вьюхе? Как это работает?
  4. Аргументы, как это использовать?
Panels.
  1. Что это панель, регион, вариант, пэйн?
  2. Стандартные панели. Что такое selection rules?
  3. Panels everywhere - для каких целей и как использовать?
Ctools plugins.
  1. Content-type - что такое и когда стоит использовать? Отличие от блоков.
  2. Style - что такое, для чего применяется?
  3. Context - что такое, для чего применяется?
  4. Access - что такое, для чего применяется?
  5. Layout - что такое? как создать свой лэйаут?
Token.
  1. Что такое токен и для чего используются, примеры?
  2. Как создать свой собственный токен?
Image.
  1. Основные image style экшены (Scale, Resize, Scale & Crop, Canvas, Overlay)
  2. Как программно отрисовать картинку без презета/с презетом?
  3. Как работает модуль image?
Input format.
  1. Plain text, Filtered text - отличие, когда что нужно использовать?
  2. Input format - для чего нужны? Примеры.
Features.
  1. Для чего нужен? Примеры использования.
JS, CSS, JSS
  1. Способы подключения собственного JS
  2. Что такое Drupal.settings? Примеры использования.
  3. Behavior, что такое и зачем использовать?
  4. Основные стандарты кодинга в JS
Cache
  1. drupal_static(), cache_set(), cache_get().
  2. Что такое memcache? Зачем и как использовать?
  3. Boost, что такое, как работает? Когда надо использовать?
Apachesolr
  1. Что такое, как настроить?
  2. Как добавить/исключить контент-тайпы/поля из индексации
  3. Как затемить вывод результатов?
  4. Фасеты, что это такое