:-)
tug, 5 баллов - замечательный ответ.
Итак, с одной стороны кажется, что проще сделать отдельный магазин для каждого вендора, но на будущее лучше все складывать в одну таблицу.
У меня все равно выбора нет: нужно было сделать это хак еще на той неделе...
Поделюсь тем, что уже сделано:
1. ps_cart.php
в класс ps_cart все равно
$cart['shopid'] = 0;
$_SESSION['cart'][$k]["shopid"]=intval($d["vendor_id"]);
Итак, у меня все равно выбора нет: нужно было сделать это хак еще на той неделе...
Поделюсь тем, что уже сделано:
1.
ps_cart.phpв класс ps_cart все равно
$cart['shopid'] = 0; придется добавлять переменную для отслеживания вендора
И собственно потом при добавлении товара в корзину
$_SESSION['cart'][$k]["shopid"]=intval($d["vendor_id"]);
Перед этим нужно найти запрос, который обращается к VM_product и формирует массив $d, и дописать в этот запрос поле vendor_id (в базе оно уже есть, и при добавлении товара впринице этот vendor_id записывается правильно)
2.
shop.browse.phpМне не просто было осознать, что скрипт не лезет в базу за информацией о товаре, при нажатии на кнопку "добавить в корзину".
Он берет эту информацию из спратанных полей.
Поэтому нужно добавить
<input type=\"hidden\" name=\"vendor_id\" value=\"".$db_browse->f('vendor_id')."\" />\n
в shop.browse.php в районе 396 строки
И естественно нужно найти запрос (фаил
shop_browse_queries.php), который формирует этот массив f() и дописать в этот запрос поле vendor_id.
3.
mod_virtuemart.phpДальше нужно или отдельны модуль сделать или дописать в mod_virtuemart функцию вывода структуры магазинов.
Я дописал в mod_virtuemart.
При этом добавил кусочек кода:
if (isset($_GET['category_id']))
{
require_once(CLASSPATH."ps_database.php");
$db = new ps_DB();
$q = "SELECT vendor_id FROM #__{vm}_category WHERE category_id = ".intval($_GET['category_id']);
$db->query($q);
$db->next_record();
$_SESSION['shopid'] = $db->f("vendor_id");
}
чтобы, когда мы заходим в определенный магази, в меню отображались категории этого магазина.
и соответствуенно в функцию getCategoryTreeArray нужно добавить "фильтрацию" категорий:
if (isset($_SESSION['shopid']))
{
$query .= " vendor_id=".intval($_SESSION['shopid'])." AND ";
}
4.
ps_checkout.php Столкнулся со странными сложностями в этом классе. А именно.
Как должен вести себя скрипт при одновременном заказе товаров из разных магазинов? Очевидно, список выбранных в корзину товаров должен делиться на группы по единому вендору и обрабатываться эти группы должны как различные orders.
Добавил вот такой кусок:
$temp_cart=$_SESSION['cart'];
$vendors=array(); // $vendors - массив номеров вендоров
for ($ii=0;$ii<$temp_cart['idx'];$ii++)
{
$vendors[$ii]=$temp_cart[$ii]['shopid'];
}
$vendors=array_unique($vendors);
$unique_count=count($vendors);
for($jj=0;$jj<$unique_count;$jj++)
{
$cart=array('idx'=>0);
// массив $cart мы разделяем на несколько массивов
// для каждого вендора свой order
for ($ii=0;$ii<$temp_cart['idx'];$ii++)
{
if ($temp_cart[$ii]['shopid']==$vendors[$jj])
{
array_push($cart,$temp_cart[$ii]);
$cart['idx']++;
}
}
Еще нужно немного подправить функцию
get_order_number - чтобы для этих разделенных заказов формировался различный $order_number.
Поидее товары одного вендора должны формироваться в массив $cart и обрабатываться как отдельные заказы, однако скрипт в таблицу oreders умудряется сохранять все, что было выбрано в корзину, даже несмотря на то, что фактически в $cart попадают разные товары. Не могу понять почему?
Это собственно грабли какие-то.5.
admin.user_list.phpПочему-то отсутствовала связка пользователь-вендор.
Нужно подправлять. Т.е. пользователю можно было назначить принадлежность к определенному магазину, но при построении <select'а не вывотилось текущее значение поля vendor_id ... почему-то и щаз я не могу найти его...
6. Я думаю, что с оплатой и доставкой потом будет проще. Главное для начала обеспечить минимальную функциональность.