Аватар пользователя Andruxa Andruxa 0 36

Интернет-магазин "День Сурка"

http://www.densurka.ru

Я делал бэкенд, дизайном и вёрсткой занимались другие люди.
Плюс перенос всего контента из drupal 6 + ubercart 2.

26000 сущностей product,
3000 product display,
116 типов товаров (отдельная сущность, в которой хранятся настройки атрибутов, отображения и т.д)
1500 цветов,
600 размеров,
90 особенностей товаров - по ним можно делать выборку в каталоге,
225 характеристик товаров, пока выполняют описательную функцию, планируется добавлять их в индекс в зависимости от типа товара

Цвета и размеры приведены к общепонятным.

28 июня 2015 в 15:15

Передача числового аргумента во вложенное представление - маленький грабль

Потоптал немного граблей, докладываю:

допустим, имеются 2 представления, назовём их П1 и П2
П1 - с контекстным фильтром,
П2 - тоже с контекстными фильтрами, один из них - просто целое число: представление вызывается из разных мест, и чтобы не плодить представления, обошелся одним с числовым аргументом

итак, из П1 вызывается П2, в него передаются 2 аргумента в виде: [myarg]/1
[myarg] - значение поля, которое скрыто в выводе, 1 - это просто число 'один'

в таком виде оно не работает
если подставить в П2 [myarg]/1 - всё в порядке, а при вызове из П1 - не работает

Оказалось, что вместо числа 1 (один) в П2 передавалось значение контекстного фильтра П1, т.е. получалось, что запись [myarg]/1 была эквивалентна [myarg]/!1

30 июня 2013 в 9:55

Доработка YML export под d6

Потребовалось экспортировать товары из определенных разделов каталога в Я.Маркет, есть модуль Yml export, который экспортирует все товары из каталога.

Немного доработал его, теперь в настройках можно выбрать разделы каталога, из которых будут экспортированы товары.
Если разделы не выбраны - экспортируется весь каталог.

5 июня 2013 в 0:58

Кеширование запросов к БД в своём модуле

Приветствую.

Пишу модуль, хранящий данные в своей таблице, ориентировочно предполагаю 500-1000 записей.
Данные редко обновляются, но планируется их частое чтение, запрос возвращает 5-15 записей за раз.

Соответствено, возникла мысль кешировать результаты запросов, чтобы не насиловать БД.

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

11 апреля 2013 в 13:39

Форма создания материала - виджет 2 в 1

Приветствую.

Есть такая задача.
Тип материала - приказ (по организации). Он может касаться должности и (или) сотрудника.
Например, с приказом об увольнении сотрудника должен быть ознакомлен непосредственно сам увольняемый (юзер), его начальник (должность), начальник СБ (должность) ну и т.д.
Valeratal меня поправит или дополнит при желании.

Соотвественно - приказ это нода, сотрудник - юзер, должность - термин таксономии в дереве штатной структуры.
Типу материала "приказ" добавляются два поля - юзеррефренс для сотрудника и термрефренс для должности.

Но руководство решило пойти дальше и совместить понятия пространства и времени.

18 января 2013 в 16:52

Media Gallery + Media Internet Sources = медиаконтент со сторонних ресурсов

Есть задача - дать возможность пользователю создавать свои материалы, к которым прикреплять фото и видео.

В связи нежеланием нести ответственность за содержимое этих фото и видео, а также финансировать собственный фото- и уж тем более, видеохостинг, возникает желание - дать пользователю возможность постить материалы и прикреплять к ним ссылки на медиафайлы, размещенные на сторонних хостингах.

С этим неплохо справляется Media Gallery: пользователь имеет возможность закачать файл, с помощью Media Internet Sources - размещать ссылки на медиафайлы, находящиеся на сторонних хостингах, а также выбирать медиа из библиотеки, куда они добавляются автоматически после аплода или после указания внешней ссылки.

Теперь чего не хватает в этом функционале.

16 августа 2012 в 2:27
Аватар пользователя Andruxa Andruxa 0 16

Свой сервис коротких ссылок

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

Нужно, чтобы при создании контента на сайте, происходил кросспост в разные фейсбуки и при этом в нем сразу указывалась короткая ссылка на алиас, по которому расположен этот контент, т.е.
создается нода www.site.com/node/100500, при её сохранении pathauto генерит ей алиас www.site.com/контент/чпу-ноды, содержимое публикуется в нужной соцсети и в кросспосте указывается короткая ссылка вида si.te/hhVHV, по которой происходит редирект 301 на www.site.com/контент/чпу-ноды (а не на системный путь www.site.com/node/100500)

12 августа 2012 в 3:50

D6 + UC2 - виды доставок в зависимости от суммы и адреса заказа

Расскажу о том, как в форме оформления заказа выводить те способы доставки, которые актуальны для данного заказа.

Типичный случай для интернет-магазина: покупателю предлагается доставка курьером по Default City (город, где расположен склад магазина), которая может быть бесплатной при сумме заказа, превышающей определённый порог и доставка почтой / EMS / транспортной компанией - в другие города.

Оговорюсь сразу - я слыхал, но лично не встречал модуль расчета стоимости доставки почтой России, про расчет доставки транспортными компаниями мне вообще ничего не известно, d.org тому в подтверждение,

8 апреля 2012 в 1:34
Аватар пользователя Andruxa Andruxa 0 26

Сайт-визитка отеля

http://www.iguasu.ru/

Базовая тема - Framework, по совету знакомых сеонистов переделал её из HTML 5 в XHTML 1.0 - мол, Яша ещё не готов.
Хз, обратно всегда можно вернуть.

Получилось валидно, практически кроссбраузерно (IE7+)

Из недоделок:

  • можно разукрасить js форму бронирования, если будет дизайн контролов
  • на страницах нет <h1>: ТЗ от сеонистов - будут
  • по этой же причине отключен Meta tags

Я делал вёрстку, темизацию, функционал собран из стандартных модулей, dev-отсутствуют
Дизайн, фото - Олеся Ласкова.

26 октября 2011 в 2:25
Аватар пользователя Andruxa Andruxa 0 64

А вы чтите заветы Лебедева?

насчет того, что на странице не стоит постить ссылку на эту же самую станицу.

Отсюда:

Quote:

Делать ссылку с логотипа на главную («домашнюю») страницу — хорошо и правильно. Но при этом надо избегать самой часто распространенной ошибки (ради которой и написан этот параграф) — если мы находимся дома, то ссылки «на главную» там быть не должно. Это относится и к другим местам на сайте: любая ссылка подразумевает перемещение.

Один из основных законов ориентирования на вебе и гипертекстовой навигации: ничто не должно содержать ссылку на само себя.


Звучит логично и убедительно.

7 сентября 2011 в 18:35

Добавление в корзину из лайтбокса - вопрос

Решил заменить стандарные уберкартовские атрибуты на решение, описанное в этом топике

Вкратце - каждому набору атрибутов создается своя нода-товар с cck-полями - атрибутами,
Ноды-товары объединяются нодой-заголовком товара через нодрефренс, на странице ноды-заголовка список товаров выводится прикрепленным вьюсом, табличный вид:
фото товара, его заголовок, цена, кнопка добавления в корзину
Во вьюсе сделаны expoised filters, с помощью которых можно отфильтровать ноды-товары по их cck-полям - атрибутам.
С помощью Filters Auto-submit фильтрация происходит без перезагрузки страницы.
C помощью Ajax Driven Cart добавление в корзину и обновление блока корзины также происходит без перезагрузки страницы.

С этим все понятно.

Теперь возникло желание воспризвести функционал стандартного каталога уберкарта - если у товара есть атрибуты, при нажатии на кнопку добавления в корзину, покупателя просят выбрать атрибуты для товара.
Для этого в представлении, выводящим список товаров (это представление прикреплено к странице товара-заголовка) делаю вид "Страница", путь - selectproduct/%, где % - nid ноды-заголовка товара

В представлении, формирующем страницу каталога, для нод-заголовков товара создаю поле с ссылкой вида <a href='selectproduct/[nid]/lightbox2' rel='lightframe' title='blabla'>Добавить в корзину</a>

Соответственно, по клику на эту ссылку лайтбокс выводит iframe с представлением-списком товаров

4 августа 2011 в 18:45
Аватар пользователя Andruxa Andruxa 0 16

УРАЛСИБ. Я испытываю крайнюю степень удивления.

Довелось сегодня ставить уралсибовский клиент-банк.

Вот что он выдал в пятом огнелисе:

Quote:
Ваш браузер не поддерживается системой BS-Client (ДБО BS-Client)
Используйте Microsoft Internet Explorer версии 5.0 или выше.

т.е. пятый осёл им идеологически ближе, чем пятый огнелис

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

27 июля 2011 в 20:46

C Днем Победы!

Лейтенант Александр Чурин,
Командир артиллерийского взвода,
В пятнадцать тридцать семь
Девятнадцатого июля
Тысяча девятсот сорок второго года
Вспомнил о боге.
И попросил у него ящик снарядов
К единственной оставшейся у него
Сорокапятимиллиметровке
Бог вступил в дискуссию с лейтенантом,
Припомнил ему выступления на политзанятиях,
Насмешки над бабушкой Фросей,
Отказал в чуде,
Назвал аспидом краснопузым и бросил.
Тогда комсомолец Александр Чурин,
Ровно в пятнадцать сорок две,
Обратился к дьяволу с предложением
Обменять душу на ящик снарядов.
Дьявол в этот момент развлекался стрелком
В одном из трех танков,
Ползущих к чуринской пушке,
И, по понятным причинам,
Апеллируя к фэйр плэй и законам войны,
Отказал.
Впрочем, обещал в недалеком будущем
Похлопотать о Чурине у себя на работе.
Отступать было смешно и некуда.
Лейтенант приказал приготовить гранаты,
Но в этот момент в расположении взвода
Материализовался архангел.
С ящиком снарядов под мышкой.
Да еще починил вместе с рыжим Гришкой
Вторую пушку.
Помогал наводить.
Били, как перепелов над стерней.
Лейтенант утерся черной пятерней.
Спасибо, Боже - молился Чурин,
Что услышал меня,
Что простил идиота…
Подошло подкрепленье – стрелковая рота.
Архангел зашивал старшине живот,
Едва сдерживая рвоту.
Таращила глаза пыльная пехота.
Кто-то крестился,
Кто-то плевался, глазам не веря,
А седой ефрейтор смеялся,
И повторял –
Ну, дают! Ну, бля, артиллерия!

Автор

С праздником, друзья!

9 мая 2011 в 10:12

[решено] Список нод, прикрепленный к ноде, с теми же терминами

В этом посте была поставлена интересная и полезная задача:
- на странице ноды вывести список заголовков нод, имеющих тот же термин таксономии

С ходу возникает такой пример использования:
есть каталог статей, организованный словарем таксономии в иерархию:

политика
--внешняя
--внутренняя
экономика
культура
ну и.т.

нужно выводить после статьи список статей (их заголовки и м.б. анонсы) на ту же тематику.

Для усложнения задачи будем помнить, что:
- нода может быть привязана к нескольким словарям, некоторые из которых выполняют служебные функции, и по их терминам список строить не надо
- нода может быть привязана одновременно к нескольким терминам одного словаря (статья имеет тэги "политика" и "экономика")

Итак, создаем новое представление:
Представления > добавить ( /admin/build/views/add )
Имя представления - по вкусу, тип - Материал

Переходим на страницу редактирования представления

Взаимосвязи:
добавляем новую связь Таксономия: Связанные термины
(та, которая первая в списке, у нее описание "Relate nodes to taxonomy terms, specifiying which vocabulary or vocabularies to use...")
Включаем чекбокс "Эта связь обязательна", дальше идет список словарей, он в нашем случае не работает, чекбоксы можно не трогать

добавляем новую связь Таксономия: Материал
Выбираем Связь: термин (или какую метку вы указали первой связи)
Не использовать связь
Включаем чекбокс "Эта связь обязательна"

Аргументы:
добавляем Материал: Nid

24 апреля 2011 в 14:45

[решено] Установка D7 с pgsql на FreeBSD 8 - трабл с БД

Приветствую.

Ставлю D7 с БД pgsql на vds под FreeBSD 8 - на шаге Set up database выдает ошибку:

Failed to connect to your database server. The server reports the following message: SQLSTATE[08006] [7] FATAL: no pg_hba.conf entry for host "::1", user "d7", database "d7", SSL off.

нагуглил, что в pg_hba.conf нужно добавить строку
host all all 127.0.0.1 trust (или md5)

добавил, ребутнул - новая ошибка:
Failed to connect to your database server. The server reports the following message: SQLSTATE[08006] [7] could not connect to server: Connection refused Is the server running on host "localhost" and accepting TCP/IP connections on port 5432? could not connect to server: Connection refused Is the server running on host "localhost" and accepting TCP/IP connections on port 5432?.

Вот содержимое pg_hba.conf до:

local template1 pgsql password
host template1 pgsql 0.0.0.0 0.0.0.0 password
local all pgsql password
local   d7      d7      password
local   pge2e4  pge2e4  password

и после:

local template1 pgsql password
host template1 pgsql 0.0.0.0 0.0.0.0 password
local all pgsql password
local   d7      d7      password
local   pge2e4  pge2e4  password
host all all 127.0.0.1 trust

чего ему не хватает?
(про баги в ДНК - в курсе, я действительно аццкий чайнег Smile

upd.
надо было прописать

host    имяБД  имяПользователя    ::1/128 password

27 марта 2011 в 16:14

Как спрашивать

Мы почти всё время переводим с одного языка на другой. Это так, даже если мы умеем говорить только по-русски. А почему? Потому что одни и те же слова у разных людей ассоциированы с разными смыслами.

Для кого-то «менять шаровые» - это провести выходные в гараже. А для кого-то - заехать утром на СТО, весь день ездить на такси, а вечером получить свою машину. Для одних людей «решить квадратное уравнение» - это мгновенное действие, не подразумевающее напряжения, а для других - это звонок сыну коллеги, который как раз учится в университете, поэтому сможет справиться.

Когда перед человеком возникает задача, то он её сначала переводит с языка того, кто проблему ставит, на свой язык, чтобы понять её и выработать план решения. Поэтому лучше всего взаимодействие идёт между примерно равными людьми. Если же постановщик задачи и исполнитель очень далеки, то могут возникать неожиданные и сложные недопонимания (их даже бывает трудно обнаружить, так как люди совсем не понимают друг друга). По этой причине важно, чтобы тот, кто формулирует задачу, умел влезть в шкуру того, кто её будет выполнять. Мне кажется, что часто люди недовольны своим начальником именно из-за его неспособности или нежелания помочь с переводом задачи со своего языка на язык исполнителя. Орать на «идиотов вокруг» может каждый, а уметь внятно объяснить, чего надо делать - это обязательный навык для руководителя.

27 февраля 2011 в 9:56

Клонировать тип материала product kit

Удавался кому-нибудь сабж?

Нужно 2 типа материала - один для наборов товаров (стандартный функционал), на базе второго - создать товары, которые проходят по учету как 2 товара (например, колесо=шина+диск, условно)

28 декабря 2010 в 0:30

Добавить в menu block функционал jquerymenu

Привет.

Модуль jquerymenu позволяет сделать удобное меню для сайдбара - с разворачиванием подпунктов меню без перезагрузки страницы, но при этом у него есть один существенный недостаток - нельзя указать, с какого подпункта меню начинать вывод, и его глубину.

Этого недостатка лишен модуль menu block, но он лишен функционала jquery.

Итак, скрещиваем ужа с ежом.

В файле template.php своей темы добавляем функции:

function название-темы_menu_item__menu_block__номер-блока($link, $has_children, $menu = '', $in_active_trail = FALSE, $extra_class = NULL) {
  $class = ($menu && $in_active_trail ? 'parent open' : ($has_children ? 'parent closed' : 'leaf')); // Для того, чтобы
// menu_block выводил на страницу все подпункты меню, а не только верхнего уровня
// (а то разворачивать будет нечего), нужно либо в настройках меню, либо в настройках
// блока menu_block раскрыть все подпункты меню, но в таком случае оно будет изначально
// выводиться на страницу полностью раскрытым, что не есть хорошо. Здесь всем пунктам
// меню назначается класс closed, кроме тех, которые in_active_trail

//  if (!empty($extra_class)) {     Тут добавляются дополнительные классы,
//    $class .= ' '. $extra_class;  вроде lirst, last, menu-его номер
//  }                               мне они без надобности, поэтому отключаю

  if ($in_active_trail) {         // Добавляется класс active-trail
    $class .= ' active-trail';    // чтобы меню разворачивалось до
  }                               // активного пункта

27 декабря 2010 в 18:41

Заменить CSS модулей своими

Копаю темизацию, прописать стили на морду - ничего сложного, а если задаться целью темизировать админку в общем дизайне сайта - начинают мешать таблицы стилей, подгружаемые модулями.
Каскадные стили такие каскадные...

Решения:
1. Править файлы css, которые лежат в папках с модулями - некошерно.

2. Отключить файлы CSS и прописать стили в своих CSS - они будут грузиться всегда, вне зависимоси от участия модуля в рендере страницы.

Решил заменить таблицы стилей модулей своими, используя решение с ДрупалКукБука:
в template.php своей темы в функции имя-темы_preprocess_page добавил:

  $path_to_theme = drupal_get_path('theme', 'имя-темы');
  foreach ( $vars['css']['all']['module'] as $css =>$val ){
        $vars['css']['all']['module'][$path_to_theme . '/css/' . basename($css)] = $val;
        unset($vars['css']['all']['module'][$css]);
  }
  $vars['styles'] = drupal_get_css($vars['css']);
  unset($path_to_theme);

Остается скопировать файлы CSS из папок с модулями в подпапку /css своей темы, и править их как угодно.

Недостатки - при добавлении модулей надо помнить о необходимости копирования его стилей в свою тему.
решено, вопрос - по нагрузке (я не ощутил) и кошерности кода (N лет назад кодил на vb6, php - со словарем)

18 декабря 2010 в 13:55