Поддержка сайта

Высокие позиции в поисковой системе, на прямую зависят от развития вашего сайта.

Продвижение сайтов

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

Создание сайтов

Мы делаем сайты быстро, недорого и профессионально. От работы с нами, у вас останутся только положительные эмоции.

Поддержка динамических атрибутов

Расширим функциональность объекта Product: обеспечим извлечение всех атрибутов, реализуем запрос и установку значений отдельных атрибутов и позволим уровню представления показать все эти сведения.

Расширение возможностей объекта Product

1. Вернитесь в проект WroxCommerce среды VB и добавьте в объект Product свойство Attributes:

 Поддержка динамических атрибутов

2. Реализовав извлечение списка атрибутов, перейдем к получению и установке их значений. Сначала добавьте в объект Product метод, возвращающий значение соответствующего столбца Datatype:

 

 Поддержка динамических атрибутов

 

Поддержка динамических атрибутов

3. Теперь мы имеем строку для хранения данных. Напишем свойство Attrib, позволяющее получать и устанавливать значения атрибутов. Начнем с фрагмента Get:

 Поддержка динамических атрибутов

4. Затем введите часть Let:

Поддержка динамических атрибутов

Поддержка динамических атрибутов

 

 

Описание работы

Свойство Attributes запускает запрос к базе данных для выбора строк в ранее созданном представлении vAttributes, где известны тип и идентификатор товара. Представление vAttributes хорошо структурировано (с помощью внешнего соединения), поэтому всегда возвращает полный набор атрибутов товара, даже если не все атрибуты объекта были установлены.

Перед созданием свойства Attrib (слово Attribute зарезервировано в VB), служащего для получения и установки значений атрибутов, нужно добавить метод GetAttributeType. Он обращается к таблице AttributeStructure в поисках типа данных атрибута, который мы собираемся установить. Этот же метод укажет на попытку установки неправильного атрибута, поскольку мы получим для него значение atlnvalid.

Сначала в таблице AttributeStructure запрашивается строка с заданным StructurelD:

 Поддержка динамических атрибутов

У сервера SQL Server запрашивается только значение столбца Datatype (больше пока ничего не требуется). При получении пустого набора записей станет ясно, что StructurelD некорректен, иначе будет возвращено значение столбца Datatype:

If Not Query.EOF Then

GetAttributeType = Query("Datatype") Else

GetAttributeType = atlnvalid End If

Нам известно, в какую строку должны быть записаны данные, возвращаемые свойством Attrib. Попытка обращения к этому свойству всегда дает значение StructurelD, уникально идентифицирующее атрибут, который нужно установить.

Во фрагменте Get свойства заполним строку данными из представления vAttributes, которые соответствуют указанным StructurelD и ProductlD. Если мы ничего не получим, значит, атрибут не имеет специального значения для данного товара, поэтому делать ничего не надо:

Public Property Get Attrib(ByVal StructurelD As Long) As Variant Dim Query As Recordset

Set Query = m_utility. DB.DB. Execute ("select * from vAttributes " &  "where ProductID=" & ID & " and StructureID=" & StructurelD) If Not Query.EOF Then

Получив значение атрибута, обращаемся к столбцу Datatype, чтобы выяснить, какой столбец содержит требуемые данные. Если нам нужно "длинное" поле, мы берем данные из столбца LongValue, и т.д.:

 Поддержка динамических атрибутов

Перейдем к фрагменту Let. Мы решили, что если не нужно устанавливать значение атрибута, не будем занимать для него место в базе данных. Поэтому, если newval поступает со значением Empty, удаляем строку. Если строки нет вовсе (атрибуты не устанавливались), оператор не приведет к ошибке, следовательно, не нужно выполнять проверку:

 Поддержка динамических атрибутов

При выборе режима установки значения атрибута прежде всего выполняется SELECT для проверки существования атрибута. Если атрибут есть, меняем его значение. Если же атрибута нет, то создаем его. Для новой строки нужно установить ProductlD и StructurelD:

 Поддержка динамических атрибутов

Независимо от того, существовал атрибут раньше или только что был создан, выполняются одни те же действия. Построенный ранее метод GetAttributeType позволяет определить, в каком столбце нужно сохранить значение, а оператор Select Case выполняет сохранение. Наконец, мы обновляем и закрываем строку, причем эти операции изменяют данные на диске:

 Поддержка динамических атрибутов

В результате получено свойство, возвращающее полный набор динамических атрибутов товара. Перейдем к выводу этих атрибутов на странице описаний.

Добавление динамических атрибутов на страницу detail.asp

1. В коде VB объявлены разные типы данных для атрибутов. Необходимо, чтобы эта информация попала в код ASP. Перенесите ранее созданное перечисление (в модуле Globals проекта VB) в верхнюю часть site.asp:

 Поддержка динамических атрибутов

2. Добавьте на страницу detail.asp код создания таблицы для вывода атрибутов:

 Поддержка динамических атрибутов

Поддержка динамических атрибутов

 

Описание работы

Сначала нужно загрузить описания атрибутов из Product, обратившись к свойству Attributes. Запрашивается представление vAttributes для получения набора всех допустимых атрибутов товара независимо от присвоения им значений:

Dim Attributes

Set Attributes = Product.Attributes If Not Attributes.EOF Then

Затем выполняется просмотр списка атрибутов. Вне зависимости от типа данных, мы выводим имя атрибута, запросив столбец Name набора записей Attributes. После чего обращаемся к столбцу Datatype и используем полученное значение в Select Case, чтобы решить, как вывести значения. Функция IsNull позволяет узнать, был ли установлен атрибут для данного элемента:

 Поддержка динамических атрибутов

Поддержка динамических атрибутов

 

Свойство Attributes служит для выбора набора атрибутов, специфицированного для просматриваемого типа элемента. В запросе мы получаем все строки представления vAttributes, даже если для атрибута и товара не указаны специальные значения.

На отсутствие набора значений для пары атрибут/продукт указывает null-значение идентификатора ProductlD. Мы проверяем этот идентификатор и, если значение не было установлено, выводим небольшой серый знак вопроса. Если же значение задано, тестируем столбец Datatype и выясняем способ вывода значения:

 Поддержка динамических атрибутов

Итак, реализовано отображение информации о любом атрибуте в браузере посетителя, но пока нет способа ввода этой информации в базу данных.

Читайте так же:
Not found

Нам доверяют

Интернет магазин