Batko 0 Опубликовано 12 декабря, 2008 Жалоба Share Опубликовано 12 декабря, 2008 В теме про добавление баннеров в модуль я написал, что делаю каталог фирм и товаров этих же фирм. Потому мне захотелось чтобы фирмы сами добавляли свои товары. Но надо было сделать чтобы один пользователь не видел и, соответственно, не мог удалить товарные позиции другого пользователя. Долго искал какой-нить модуль. Но как оказалось ничего этого не надо. Все делается очень быстро без всяких модулей, правда необходимо покопаться с кодом. Для начала я привязал пользователя к производителю. Добавил в таблицу customers поле manufacturers_id. Потом идем в файл login.php находим // Check if email exists $check_customer_query = vam_db_query("select customers_id, customers_vat_id, customers_firstname,customers_lastname, customers_gender, customers_password, customers_email_address, login_tries, login_time, customers_default_address_id from ".TABLE_CUSTOMERS." where customers_email_address = '".vam_db_input($email_address)."' and account_type = '0'");[/code] меняем на // Check if email exists $check_customer_query = vam_db_query("select customers_id, customers_vat_id, customers_firstname,customers_lastname, customers_gender, customers_password, customers_email_address, login_tries, login_time, customers_default_address_id, [color=red]manufacturers_id[/color] from ".TABLE_CUSTOMERS." where customers_email_address = '".vam_db_input($email_address)."' and account_type = '0'"); в запрос добавилось поле manufacturers_id (красненьким выделил). Это нужно чтоп узнать к какому производителю относится пользователь. Теперь, чтобы в любом месте, в любой строчке кода мы могли проверить что за пользователь у нас работает, необходимо завести новую переменную сессии, находим строку $_SESSION['customer_zone_id'] = $check_country['entry_zone_id']; и добавляем $_SESSION['manufacturers_id']=$check_customer['manufacturers_id']; Проделать это надо в двух местах. Так как там есть проверка на капчу. Все, с login.php закончили, теперь надо в logoff.php после unset ($_SESSION['ccard']); добавить unset ($_SESSION['manufacturers_id']); ну вот и все. Дальше каждый может делать под себя. Напишу как сделал я. // Кстати, при добавлении поля manufacturers_id в таблицу customers я сделал чтобы значение по умолчанию было 0 // При проверке смотрим, если $_SESSION['manufacturers_id']==0 значит это обычный админ/пользователь, если не ноль, // то это пользователь от производителя Теперь сделаем чтобы при добавлении пользователя-производителя администратором из админки ему приписывалось manufacturer_id идем в admin/create_account.php находим $entry_zone_id = vam_db_prepare_input($_POST['entry_zone_id']); (64 строка вроде или около этого) и добавляем $manufacturers_id = vam_db_prepare_input($_POST['manufacturers_id']); теперь ищем if ($error == false) { (у меня 292 строка) $sql_data_array = array ('customers_status' => $customers_status_c, 'customers_cid' => $customers_cid, 'customers_vat_id' => $customers_vat_id, 'customers_vat_id_status' => $customers_vat_id_status, 'customers_firstname' => $customers_firstname, 'customers_lastname' => $customers_lastname, 'customers_email_address' => $customers_email_address, 'customers_telephone' => $customers_telephone, 'customers_fax' => $customers_fax, 'payment_unallowed' => $payment_unallowed, 'shipping_unallowed' => $shipping_unallowed, 'customers_password' => $customers_password,'customers_date_added' => 'now()','customers_last_modified' => 'now()', '[color=red]manufacturers_id' => $manufacturers_id[/color]); То что я отметил красным, это надо добавить Потом ищем [code]if ($error == true) { if ($entry_email_address_error == true) { echo vam_draw_input_field('customers_email_address', $customers_email_address, 'maxlength="96"').' '.ENTRY_EMAIL_ADDRESS_ERROR; } elseif ($entry_email_address_check_error == true) { echo vam_draw_input_field('customers_email_address', $customers_email_address, 'maxlength="96"').' '.ENTRY_EMAIL_ADDRESS_CHECK_ERROR; } elseif ($entry_email_address_exists == true) { echo vam_draw_input_field('customers_email_address', $customers_email_address, 'maxlength="96"').' '.ENTRY_EMAIL_ADDRESS_ERROR_EXISTS; } else { echo vam_draw_input_field('customers_email_address', $customers_email_address, 'maxlength="96"'); }} else { echo vam_draw_input_field('customers_email_address', $customers_email_address, 'maxlength="96"');}?></td> </tr> </table></td> </tr> добавляем <?php $manufacturers_array = array (array ('id' => '', 'text' => TEXT_NONE)); $manufacturers_query = vam_db_query("select manufacturers_id, manufacturers_name from ".TABLE_MANUFACTURERS." order by manufacturers_name");while ($manufacturers = vam_db_fetch_array($manufacturers_query)) { $manufacturers_array[] = array ('id' => $manufacturers['manufacturers_id'], 'text' => $manufacturers['manufacturers_name']);}?> <tr> <td class="formAreaTitle"><?php echo CATEGORY_COMPANY; ?></td> </tr> <tr> <td class="formArea"><table border="0" cellspacing="2" cellpadding="2"> <tr> <td class="main"><?php echo ENTRY_COMPANY; ?></td> <td class="main"><?php echo vam_draw_pull_down_menu('manufacturers_id', $manufacturers_array, '0'); ?></td> </tr></table> </td> </tr>[/code] Все. теперь при добавлении пользователя из админки появится поле "Компания:" и там можно будет выбрать производителя. ... Дальше. Я захотел сделать чтобы у админо-пользователей-производителей не отображалось добавить/удалить категорию, а осталась возможность добавлять и редактировать только [b]свои[/b] товары. идем в categories_view.php Находим [code]//formiruem stroku kol-va if ($_GET['search']) { $products_query = vam_db_query(" SELECT p.products_tax_class_id, p.products_id, pd.products_name, p.products_sort, p.products_quantity, p.products_to_xml, p.products_image, p.products_price, p.products_discount_allowed, p.products_date_added, p.products_last_modified, p.products_date_available, p.products_status, p.products_startpage, p.products_startpage_sort, p2c.categories_id FROM " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c WHERE p.products_id = pd.products_id AND pd.language_id = '" . $_SESSION['languages_id'] . "' AND p.products_id = p2c.products_id AND (pd.products_name like '%" . $_GET['search'] . "%' OR p.products_model = '" . $_GET['search'] . "') ORDER BY " . $prodsort . " limit ".$page.",".$max_count); } else { $products_query = vam_db_query(" SELECT p.products_tax_class_id, p.products_sort, p.products_id, pd.products_name, p.products_quantity, p.products_to_xml, p.products_image, p.products_price, p.products_discount_allowed, p.products_date_added, p.products_last_modified, p.products_date_available, p.products_status, p.products_startpage, p.products_startpage_sort FROM " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c WHERE p.products_id = pd.products_id AND pd.language_id = '" . (int)$_SESSION['languages_id'] . "' AND p.products_id = p2c.products_id AND p2c.categories_id = '" . $current_category_id . "' ORDER BY " . $prodsort . " limit ".$page.",".$max_count); } Меняем на if ($_GET['search']) { $products_query = vam_db_query(" SELECT p.products_tax_class_id, p.products_id, pd.products_name, p.products_sort, p.products_quantity, p.products_to_xml, p.products_image, p.products_price, p.products_discount_allowed, p.products_date_added, p.products_last_modified, p.products_date_available, p.products_status, p.products_startpage, p.products_startpage_sort, p2c.categories_id FROM " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c WHERE p.products_id = pd.products_id AND pd.language_id = '" . $_SESSION['languages_id'] . "' AND p.products_id = p2c.products_id AND (pd.products_name like '%" . $_GET['search'] . "%' OR p.products_model = '" . $_GET['search'] . "') ORDER BY " . $prodsort . " limit ".$page.",".$max_count); } else { if ($_SESSION['manufacturers_id']==0){ //Если это обычный админ - показываем ему все. $products_query = vam_db_query(" SELECT p.products_tax_class_id, p.products_sort, p.products_id, pd.products_name, p.products_quantity, p.products_to_xml, p.products_image, p.products_price, p.products_discount_allowed, p.products_date_added, p.products_last_modified, p.products_date_available, p.products_status, p.products_startpage, p.products_startpage_sort FROM " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c WHERE p.products_id = pd.products_id AND pd.language_id = '" . (int)$_SESSION['languages_id'] . "' AND p.products_id = p2c.products_id AND p2c.categories_id = '" . $current_category_id . "' ORDER BY " . $prodsort . " limit ".$page.",".$max_count); }else{ //Если это админопользователь-производитель покажем ему только его товары (с manufacturers_id=$_SESSION['manufacturers_id']) $products_query = vam_db_query(" SELECT p.products_tax_class_id, p.products_sort, p.products_id, pd.products_name, p.products_quantity, p.products_to_xml, p.products_image, p.products_price, p.products_discount_allowed, p.products_date_added, p.products_last_modified, p.products_date_available, p.products_status, p.products_startpage, p.products_startpage_sort FROM " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c WHERE p.manufacturers_id=".(int)$_SESSION['manufacturers_id']." AND p.products_id = pd.products_id AND pd.language_id = '" . (int)$_SESSION['languages_id'] . "' AND p.products_id = p2c.products_id AND p2c.categories_id = '" . $current_category_id . "' ORDER BY " . $prodsort . " limit ".$page.",".$max_count); } }[/code] Ссылка на сообщение Поделиться на другие сайты
Batko 0 Опубликовано 12 декабря, 2008 Автор Жалоба Share Опубликовано 12 декабря, 2008 дальше уберем все что касается категорий, ищем //Multi Element Actions $contents[] = array('align' => 'center', 'text' => '<div style="padding-top: 5px; font-weight: bold; width: 90%;">' . TEXT_MARKED_ELEMENTS . '</div>'); $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><input type="submit" class="button" name="multi_delete" onClick="this.blur();" value="'. BUTTON_DELETE . '"></td></tr><tr><td align="center"><input type="submit" class="button" onClick="this.blur();" name="multi_move" value="' . BUTTON_MOVE . '"></td></tr><tr><td align="center"><input type="submit" class="button" onClick="this.blur();" name="multi_copy" value="' . BUTTON_COPY . '"></td></tr></table>'); $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><input type="submit" class="button" name="multi_status_on" onClick="this.blur();" value="'. BUTTON_STATUS_ON . '"></td></tr><tr><td align="center"><input type="submit" class="button" onClick="this.blur();" name="multi_status_off" value="' . BUTTON_STATUS_OFF . '"></td></tr></table>'); $contents[] = array('text' => '</form>'); //Single Element Actions $contents[] = array('align' => 'center', 'text' => '<div style="padding-top: 5px; font-weight: bold; width: 90%; border-top: 1px solid Black; margin-top: 5px;">' . TEXT_ACTIVE_ELEMENT . '</div>'); $contents[] = array('align' => 'center', 'text' => '<a class="button" onClick="this.blur();" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&cID=' . $cInfo->categories_id . '&action=edit_category') . '">' . BUTTON_EDIT . '</a>'); //Insert new Element Actions $contents[] = array('align' => 'center', 'text' => '<div style="padding-top: 5px; font-weight: bold; width: 90%; border-top: 1px solid Black; margin-top: 5px;">' . TEXT_INSERT_ELEMENT . '</div>');[/code] меняем на [code] //Multi Element Actions if ($_SESSION['manufacturers_id']==0){ ///// Все то же самое только добавили проверку на manufacturer_id $contents[] = array('align' => 'center', 'text' => '<div style="padding-top: 5px; font-weight: bold; width: 90%;">' . TEXT_MARKED_ELEMENTS . '</div>'); $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><input type="submit" class="button" name="multi_delete" onClick="this.blur();" value="'. BUTTON_DELETE . '"></td></tr><tr><td align="center"><input type="submit" class="button" onClick="this.blur();" name="multi_move" value="' . BUTTON_MOVE . '"></td></tr><tr><td align="center"><input type="submit" class="button" onClick="this.blur();" name="multi_copy" value="' . BUTTON_COPY . '"></td></tr></table>'); $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><input type="submit" class="button" name="multi_status_on" onClick="this.blur();" value="'. BUTTON_STATUS_ON . '"></td></tr><tr><td align="center"><input type="submit" class="button" onClick="this.blur();" name="multi_status_off" value="' . BUTTON_STATUS_OFF . '"></td></tr></table>'); $contents[] = array('text' => '</form>'); //Single Element Actions $contents[] = array('align' => 'center', 'text' => '<div style="padding-top: 5px; font-weight: bold; width: 90%; border-top: 1px solid Black; margin-top: 5px;">' . TEXT_ACTIVE_ELEMENT . '</div>'); $contents[] = array('align' => 'center', 'text' => '<a class="button" onClick="this.blur();" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&cID=' . $cInfo->categories_id . '&action=edit_category') . '">' . BUTTON_EDIT . '</a>'); //Insert new Element Actions $contents[] = array('align' => 'center', 'text' => '<div style="padding-top: 5px; font-weight: bold; width: 90%; border-top: 1px solid Black; margin-top: 5px;">' . TEXT_INSERT_ELEMENT . '</div>'); } после этого блока вместо if (!$_GET['search']) { $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_category') . '">' . BUTTON_NEW_CATEGORIES . '</a></td></tr><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_product') . '">' . BUTTON_NEW_PRODUCTS . '</a></td></tr></table>'); }[/code] пишем [code] if (!$_GET['search']) { if ($_SESSION['manufacturers_id']==0){ /////Max $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_category') . '">' . BUTTON_NEW_CATEGORIES . '</a></td></tr><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_product') . '">' . BUTTON_NEW_PRODUCTS . '</a></td></tr></table>'); } else { $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_product') . '">' . BUTTON_NEW_PRODUCTS . '</a></td></tr></table>'); } } далее ищем //Insert new Element Actions $contents[] = array('align' => 'center', 'text' => '<div style="padding-top: 5px; font-weight: bold; width: 90%; border-top: 1px solid Black; margin-top: 5px;">' . TEXT_INSERT_ELEMENT . '</div>'); if (!$_GET['search']) { $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_category') . '">' . BUTTON_NEW_CATEGORIES . '</a></td></tr><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_product') . '">' . BUTTON_NEW_PRODUCTS . '</a></td></tr></table>'); }[/code] меняем на [code] //Insert new Element Actions $contents[] = array('align' => 'center', 'text' => '<div style="padding-top: 5px; font-weight: bold; width: 90%; border-top: 1px solid Black; margin-top: 5px;">' . TEXT_INSERT_ELEMENT . '</div>'); if (!$_GET['search']) { if ($_SESSION['manufacturers_id']==0){ /////Max $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_category') . '">' . BUTTON_NEW_CATEGORIES . '</a></td></tr><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_product') . '">' . BUTTON_NEW_PRODUCTS . '</a></td></tr></table>'); } else { $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_product') . '">' . BUTTON_NEW_PRODUCTS . '</a></td></tr></table>'); } } ну и наконец, ищем } else { // create category/product info $heading[] = array('text' => '<b>' . EMPTY_CATEGORY . '</b>'); $contents[] = array('text' => sprintf(TEXT_NO_CHILD_CATEGORIES_OR_PRODUCTS, vam_get_categories_name($current_category_id, $_SESSION['languages_id']))); $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_category') . '">' . BUTTON_NEW_CATEGORIES . '</a></td></tr><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_product') . '">' . BUTTON_NEW_PRODUCTS . '</a></td></tr></table>'); }[/code] меняем на [code] } else { // create category/product info $heading[] = array('text' => '<b>' . EMPTY_CATEGORY . '</b>'); $contents[] = array('text' => sprintf(TEXT_NO_CHILD_CATEGORIES_OR_PRODUCTS, vam_get_categories_name($current_category_id, $_SESSION['languages_id']))); if ($_SESSION['manufacturers_id']==0){ /////Max $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_category') . '">' . BUTTON_NEW_CATEGORIES . '</a></td></tr><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_product') . '">' . BUTTON_NEW_PRODUCTS . '</a></td></tr></table>'); } else { $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_product') . '">' . BUTTON_NEW_PRODUCTS . '</a></td></tr></table>'); } } Все. Это кажется что писанины много. А на самом деле все легко. пишите еси что отвечу. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 12 декабря, 2008 Жалоба Share Опубликовано 12 декабря, 2008 Спасибо, что решили поделиться кодом. Обязательно пригодится, не сейчас, так в будущем точно. Ссылка на сообщение Поделиться на другие сайты
Batko 0 Опубликовано 12 декабря, 2008 Автор Жалоба Share Опубликовано 12 декабря, 2008 нет проблем. Просто у кого то может возникнуть такая потребность. мож и пригодится кому. Забыл сказать, что пользователя-производителя надо делать админом и давать ему доступ только на categories. По принципу описанному выше можно открывать/закрывать доступ к любой части кода по следующей схеме if ($_SESSION['manufacturers_id']==0){тут все для обычных пользователей} else{тут для пользователей-производителей} Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 13 декабря, 2008 Жалоба Share Опубликовано 13 декабря, 2008 Отлично Ссылка на сообщение Поделиться на другие сайты
darkdragon19 0 Опубликовано 10 октября, 2010 Жалоба Share Опубликовано 10 октября, 2010 спс за код. Сейчас испробую. Добавляется мгновенно или после одобрения администратором? Может допишите такой код - отправлено на проверку администратору. К примеру как отзывы от не зарегистрированных пользователей. Хотелось бы больше контроля, шутников много. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 11 октября, 2010 Жалоба Share Опубликовано 11 октября, 2010 Автор кода на форуме уже давно не был, так что вряд ли он допишет. Разве что только дописать своими силами. Ссылка на сообщение Поделиться на другие сайты
darkdragon19 0 Опубликовано 11 октября, 2010 Жалоба Share Опубликовано 11 октября, 2010 скажи пожалуйста как устранить синтаксическую ошибку Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 11 октября, 2010 Жалоба Share Опубликовано 11 октября, 2010 Наверное где-то скобка не закрыта. Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения