Основной курс по Joomla
0 Пользователей и 1 Гость просматривают эту тему.
  • 1 Ответов
  • 267 Просмотров
*

Modis

  • Осваиваюсь на форуме
  • ***
  • 81
  • 0
Всем привет. На сайте используется магазин. Продажа ключей к программам. Изначально было так:
Есть товар. У товара есть два атрибута: Имя функции и Версия AutoCAD. И есть один свободный атрибут: Регистрационный ключ.
При покупке должен сформироваться ответный ключ, из строки "ВерсияАвтокад+РегКлюч+ИмяФункции" используя md5. Лично я не силен в php. У меня вся эта реализация есть на C#, поэтому я нанимал фрилансера и он мне реализовал мою задачу. Я поискал по файлам магазина и нашел реализацию в файле /com_jshopping/tables/order.php:
Код: php
function getAllItems(){
    if (!isset($this->items)){
        $jshopConfig = JSFactory::getConfig();
        $query = "SELECT OI.* FROM `#__jshopping_order_item` as OI WHERE OI.order_id = '".$this->_db->escape($this->order_id)."'";
        $this->_db->setQuery($query);
        $this->items = $this->_db->loadObjectList();

        $query = "SELECT * FROM `#__jshopping_attr_values`";
        $this->_db->setQuery($query);
        $attributes = $this->_db->loadObjectList();

        foreach($this->items as $k=>$v){
            $this->items[$k]->_qty_unit = '';
            $this->items[$k]->delivery_time = '';
            $depend_attr = unserialize($this->items[$k]->attributes);

            foreach ($attributes as $key => $val) {
                if (array_key_exists($val->attr_id, $depend_attr) && in_array($val->value_id, $depend_attr)) {
                    $this->items[$k]->attributes_values[$val->attr_id] = $val->{'name_ru-RU'};
                }
            }
            $key = unserialize($this->items[$k]->freeattributes);
            $key = $key[1];

            $this->items[$k]->product_hash = md5(
                $this->items[$k]->attributes_values[1] .
                $key .
                $this->items[$k]->attributes_values[2]
            );
        }

        if ($jshopConfig->display_delivery_time_for_product_in_order_mail){
            $deliverytimes = JSFactory::getAllDeliveryTime();
            foreach($this->items as $k=>$v){
                if (isset($deliverytimes[$v->delivery_times_id])) {
                    $this->items[$k]->delivery_time = $deliverytimes[$v->delivery_times_id];
                }
            }
        }
    }
Теперь у меня случились важные изменения на сайте и появился еще один атрибут - Версия Revit. Т.е. у каждого товара повторяются атрибуты Версия функции, Имя функции и Рег Ключ и на выбор один атрибут - либо Версия Автокада либо версия Ревита.
По логике я понимаю, что в случае товара для ревита генерация ответного ключа должна выглядеть так:
Код: php
$this->items[$k]->product_hash = md5(
    $this->items[$k]->attributes_values[3] .
    $key .
    $this->items[$k]->attributes_values[2]
);

Осталась одна проблема - сделать условный оператор if. Т.е. если attributes_values[1] == null (по типу C# пишу )) ), то использовать attributes_values[3]. К сожалению, в php я вообще не шарю, поэтому прошу помощи форумчан
*

Modis

  • Осваиваюсь на форуме
  • ***
  • 81
  • 0
В общем решил пойти методом банальной эрудиции и сделал так:
Код: php
if($this->items[$k]->attributes_values[3] != ''){
$this->items[$k]->product_hash = md5(
$this->items[$k]->attributes_values[3] .
$key .
$this->items[$k]->attributes_values[2]
);
}else {
$this->items[$k]->product_hash = md5(
$this->items[$k]->attributes_values[1] .
$key .
$this->items[$k]->attributes_values[2]
);
}
И вроде даже работает -)))