Новости Joomla

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

Dgikar

  • Захожу иногда
  • 192
  • 3 / 0
  • Я только учусь
Пока шаманил с вышеописанной проблемой, "придумал", как артикул, сделать: дата вбивания товара на сайт + ID товара:
Код: php
<?php
echo '<input type="text" class="inputbox" name="product_sku" id="product_sku" value="';
if ($this->product->product_sku) {
$val_sku = $this->product->product_sku; //Esli artikul ustanovlen, vyvodim ego
}else{
//Poluchaem segodniashniuiu datu
$now_date = date_create('now');

$db_sku = JFactory::getDBO();

//Zapros krainego ID tovara
$q_sku = 'SELECT `virtuemart_product_id` FROM #__virtuemart_products ORDER BY `virtuemart_product_id` DESC LIMIT 1';

//Poluchaem posledniy ispol`zovanniy ID tovara, dlya formirovaniya artikula
$db_sku->setQuery($q_sku);
$data = $db_sku->loadAssoc();

//Pribavlyaem k poluchennomu ID edinitcu, dlya polucheniia nyneshnego ID tovara
$data = intval($data['virtuemart_product_id'])+1;

//Formatim datu (privodim ee k formatu: den, mesyac, god. Naprimer: 271013).
$a =  date_format($now_date, 'dmy');
//Esli hotite, chtoby data, byla v formate: 27.10.13, to, 'dmy', razdelyaete tochkami

//Pribavlyaem k poluchennoi date ID tovara
$val_sku .= $a.'-'.$data; //togda, artikul, budet imet vid: 271013-9.
/* Esli nuzhno, chtoby pered "9", byl kakoi-libo simvol, to, etu stroku, formatiruem tak:
$val_sku .= $a.'-'.'kakoi-libo simvol. Naprimer nol'.$data;
togda, artikul, budet imet vid: 271013-09. */
    }
    echo $val_sku.'" size="32" maxlength="64" />'; //Vyvodim znachenie v formu
?>
« Последнее редактирование: 28.10.2013, 04:23:21 от Dgikar »
*

Dgikar

  • Захожу иногда
  • 192
  • 3 / 0
  • Я только учусь
Ну, если долго мучатся...  ::)

Вывод артикула с нулями или "чистого" ID, в зависимости от количества цифр в артикуле (одним словом: вводная, получилась на единицу с плюсом):
Код: php
<?php
echo '<input type="text" class="inputbox" name="product_sku" id="product_sku" value="';
if ($this->product->product_sku) {
// Esli artikul ustanovlen, vyvodim ego
$val_sku = $this->product->product_sku;
} else {
$db_sku = JFactory::getDBO();

// Zapros kraynego ID tovara
$q_sku = 'SELECT `virtuemart_product_id` FROM #__virtuemart_products ORDER BY `virtuemart_product_id` DESC LIMIT 1';

// Poluchaem posledniy ispolzovanniy ID tovara, dlya formirovaniya artikula
$db_sku->setQuery($q_sku);
$data = $db_sku->loadAssoc();

// Pribavliaem k poluchennomu ID edinitcu, dlya polucheniya nyneshnego ID tovara
$data = intval($data['virtuemart_product_id'])+1;

// Poluchaem dlinu znacheniya ID tovara
$a = strlen($data);

// Ustanavlivaem kolichestvo cifr v formiruemom artikule
if ($data <= 9999) {
$a = 5 - $a; // 5 cifr
} elseif ($data <= 99999) {
$a = 6 - $a; // 6 cifr
} elseif ($data <= 999999) {
$a = 7 - $a; // 7 cifr
} elseif ($data <= 9999999) {
$a = 8 - $a; // 8 cifr
} elseif ($data <= 99999999) {
$a = 9 - $a; // 9 cifr
} elseif ($data <= 999999999) {
$a = 10 - $a; // 10 cifr
}

// Prefiks artikula
$val_sku= "KF-";

if ($data <= 999999999) {
// Esli ID tovara, menshe ili raven 999999999, to ciklom zapolniaem artikul nedostayushchimi nulyami pered ID tovara
for($i=1; $i<=$a; $i++){
$val_sku .= "0";
}
} else {
// Pribavlyaem k poluchennomu ID tovara
$val_sku .= $data;
}
}

// Esli ID tovara, menshe ili raven 999999999, to v forme, otobrazhaem nol(nuli), pered ID tovara
if ($data <= 999999999) {
echo $val_sku.$data.'" size="32" maxlength="64" />';
} else {
// Esli ID tovara, bolshe 999999999, to v forme, otobrazhaem chistiy ID tovara
echo $val_sku.'" size="32" maxlength="64" />';
}
?>

Со второй частью своего вопроса - разобрался, но вот как быть с его первой частью... ? Кто-то, что-то может посоветовать? В какую сторону рыть?

На всякий, продублирую вопрос:
  • нужно, чтобы в разных категориях, префикс у артикула - был разный...

Как я себе, это думаю (могу очень глубоко ошибаться...):
  • при создании нового товара, ни VM ни тем более сама Joomla (а зачастую и сам юзер), не знают к какой категории, причислят этот, вновь создаваемый товар. Поэтому, когда я (юзер), выбираю категорию к которой причисляю этот, новый товар, то:
    • при помощи JavaScript(...?) получаю название выбранной в выпадающем списке категории;
    • обрезаю это название до (например) 3-х первых букв;
    • присваиваю полученное уже PHP переменной;
    • "подкручиваю" к вышеописанному коду по формированию артикула

Вот только вся ф...я заключается в том, что сам, я, это, написать - не смогу...
« Последнее редактирование: 28.10.2013, 04:26:40 от Dgikar »
*

Dgikar

  • Захожу иногда
  • 192
  • 3 / 0
  • Я только учусь
Вот столкнулся с проблемкой...:
  • все то оно хорошо, артикул сам создается, все супер, но...
    • артикул, создается для новых товаров (создаваемых после клика на кнопку "Создать"), но, этот же артикул, дублируется, если дублировать товар...
    Кто-то может подсказать - как быть? Как сделать, чтобы при дублировании товара(ов), так же создавался новый артикул, согласно вышеописанным решениям?
*

Tuzemec

  • Захожу иногда
  • 246
  • 28 / 0
  • Ня!
И второй вопрос:
  • все то оно, хорошо, но, как бы так модифицировать код, чтобы перед цифрой ID в артикуле, максимально, было:
    • 3-и нуля, если артикул от единицы до девяти;
    • 2-а нуля, если артикул от десяти до девяносто девяти;
    • 1-н ноль, если артикул от ста до "бесконечности"...
Читайте сообщения выше
Этот способ имеет один изъян... Артикул идет по порядку, но имеет вид
(при длине поля =9): "Артикул: 109" вместо требуемого "Артикул: 000000109".

Решение:
При изменении типа поля "product_sku" необходимо указать атрибут "UNSIGNED ZEROFILL"
Запрос для изменения типа поля приведен ниже. Не забудьте изменить суффикс таблицы на свой.
Код
ALTER TABLE `kifnr_virtuemart_products` CHANGE `product_sku` `product_sku` INT( 9 ) UNSIGNED ZEROFILL NULL DEFAULT NULL 
Каждый ваш клик помогает заработать сыну на конфеты
Не дайте ребенку остаться без сладкого! Сделай ТЫЦ!
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Цитировать
Код: php
//Zapros krainego ID tovara
$q_sku = 'SELECT `virtuemart_product_id` FROM #__virtuemart_products ORDER BY `virtuemart_product_id` DESC LIMIT 1';
 
//Poluchaem posledniy ispol`zovanniy ID tovara, dlya formirovaniya artikula
$db_sku->setQuery($q_sku);
$data = $db_sku->loadAssoc();
 
//Pribavlyaem k poluchennomu ID edinitcu, dlya polucheniia nyneshnego ID tovara
$data = intval($data['virtuemart_product_id'])+1;
так не проще:

Код: php
$data = $db_sku->setQuery('SELECT MAX(`virtuemart_product_id`)+1 FROM #__virtuemart_products')->loadResult();
не?
Для того чтобы инкрементировать артикул при дублировании товара придется переопределить модель. в файле \administrator\components\com_virtuemart\models\product.php меняем метод createClone:

Код: php
public function createClone ($id) {
...
$this->_db = JFactory::getDBO ();  //добавить
$data = $this->_db->setQuery('SELECT MAX(`virtuemart_product_id`)+1 FROM #__virtuemart_products')->loadResult();   //добавить
$product->product_sku = $data;    //добавить

$product->save_customfields = 1;
$this->store ($product);
return $this->_id;
}
лучше написать плагин имхо, чтобы модель переопределить, но может и еще есть какой способ. Да и вьюху в которой вы правите лучше переопределить в шаблоне админки
« Последнее редактирование: 14.02.2014, 22:19:01 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

artserge

  • Захожу иногда
  • 118
  • 11 / 0
делал подобную штуку, задача была у производителя назначать префикс, т.е. например "01", "02" и т.д,
а товар должен получать префикс производителя+номер инкрементом(3 знака) при назначении производителя

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

mf_prefix - поле в таблице _virtuemart_manufacturers_ru_ru которое хранит 2 знака префикса

Триггер на афтер инсерт на таблице _virtuemart_product_manufacturers

Код
UPDATE u5klt_virtuemart_products tt
set tt.product_sku = LPAD(IFNULL(( SELECT NULLIF((kod+1),1) from (SELECT max(tp.product_sku) as kod FROM `u5klt_virtuemart_products` as tp, `u5klt_virtuemart_product_manufacturers` AS tpm
where tp.virtuemart_product_id = tpm.virtuemart_product_id
and tpm.virtuemart_manufacturer_id = NEW.virtuemart_manufacturer_id
) as tmp1 ), (SELECT concat(LPAD( tm.mf_prefix, 2, '0' ), '001')
FROM `u5klt_virtuemart_manufacturers_ru_ru` AS tm
WHERE tm.virtuemart_manufacturer_id = NEW.virtuemart_manufacturer_id
)), 5, '0')



where tt.virtuemart_product_id = NEW.virtuemart_product_id
« Последнее редактирование: 04.03.2014, 02:38:48 от artserge »
*

Chell

  • Захожу иногда
  • 62
  • 1 / 0
Пробовал, мне это не помогло. Пришлось удалять товар. По другому не сработало!!
Не надо было так радикально.
Достаточно удалить артикул в карточке и нажать "Сохранить"
Подтверждаю, простое стирание артикула не помогает, нужно удалять товары, правда у меня они были уже добавлены до установки скрипта, но без артиклей и если в них зайти и попробывать ещё раз сохранить, то появляются только нули. Кстати кому интересно: Joomla 2.5.19 и Virtuemart: 2.0.26
*

Stasweb

  • Завсегдатай
  • 1492
  • 24 / 0
Так же не получилось воплотить - в артикул, ставит нули. Что сделал:
Спойлер
[свернуть]
В итоге, получил во такое:
Спойлер
[свернуть]

Попробовал код от Garyk01 - да, заработал (и один и второй - в БД - пишет нормально), но, хотелось бы, чтобы артикул, был точно такой же, как и ID товара, ну и конечно же, чтобы поиск так же работал...

Добавлено немного позжее:

Поковырявшись, получилось сделать запись артикула в таком формате: 000000104 (где 104 - ID продукта)
Вот так изменил код от Tuzemec
Код: php
<?php
    echo '<input type="text" class="inputbox" name="product_sku" id="product_sku" value="';
        if ($this->product->product_sku) $val_sku= $this->product->product_sku;
        else{
            $db_sku = JFactory::getDBO();
            $q_sku = 'SELECT `virtuemart_product_id` FROM #__virtuemart_products ORDER BY `virtuemart_product_id` DESC LIMIT 1';
            $db_sku->setQuery($q_sku);
            $data_sku = $db_sku->loadAssoc();
            $db_sku->next_record();
            $val_sku= (int)$data_sku['virtuemart_product_id'] + 1;
        }
    echo $val_sku.'" size="32" maxlength="64" />';
?>

Правда, при создании товара, в админке, в поле артикул, вбивается только 104, но, в БД, прописывается именно 000000104

попробовал ваш вариант он присваивает артикул но он один и тот же у всех как это исправить
*

Dgikar

  • Захожу иногда
  • 192
  • 3 / 0
  • Я только учусь
Код: php
$data = $db_sku->setQuery('SELECT MAX(`virtuemart_product_id`)+1 FROM #__virtuemart_products')->loadResult();

Для того чтобы инкрементировать артикул при дублировании товара придется переопределить модель. в файле \administrator\components\com_virtuemart\models\product.php меняем метод createClone:
Код: php
public function createClone ($id) {
...
$this->_db = JFactory::getDBO ();  //dobavit
$data = $this->_db->setQuery('SELECT MAX(`virtuemart_product_id`)+1 FROM #__virtuemart_products')->loadResult();  //dobavit
$product->product_sku = $data;  //dobavit

$product->save_customfields = 1;
$this->store ($product);
return $this->_id;
}
Если честно, не очень понял что Вы имели ввиду... Вам не сложно скинуть полные листинги кодов с учетом того, что сейчас, делается на VM 3.x?

Заранее благодарю!

лучше написать плагин имхо, чтобы модель переопределить...
Я к сожалению, не так сильно дружу с PHP чтобы написать плагин :(

Да и вьюху в которой вы правите лучше переопределить в шаблоне админки
Не это - априори!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Отображение полей CF в карточке товара

Автор farmer66

Ответов: 2
Просмотров: 1119
Последний ответ 17.02.2023, 13:39:18
от farmer66
Вывод изображений настраиваемого поля в карточке товара

Автор wasssup

Ответов: 0
Просмотров: 1248
Последний ответ 05.07.2022, 08:51:19
от wasssup
Умножение свойств товара в настраиваемом поле атрибут корзины

Автор cvoboda

Ответов: 22
Просмотров: 3534
Последний ответ 20.10.2020, 11:54:13
от NIKOLY
Как удалить дочерние товары в карточке товара VM 2?

Автор zeus07

Ответов: 0
Просмотров: 829
Последний ответ 12.05.2020, 14:51:39
от zeus07
[Решено] Вывод других товаров тойже категории в карточке товара

Автор x-render

Ответов: 30
Просмотров: 7875
Последний ответ 06.01.2020, 07:39:31
от Igoritaly