Новости Joomla

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

AndreyUA

  • Захожу иногда
  • 61
  • 7 / 0
Всем добрый день!
У меня вопрос к знающим JoomShopping.
Как известно, каждый товар, производитель или категория имеет свой ID.
Я хотел бы сделать на основе ID товара и ID производителя автоматическую генерацию кода товара.

Идея такова.
При добавлении нового товара или редактирования старого, идет проверка поля "Код товара".

Условие:
Если НЕ пусто - сохранить товар с введёным кодом товара.
Если пусто - сгенерировать автоматически код такого содержания: M[id производителя]P[id товара].

Я пока только учу азы PHP, условие буду стараться написать сам.
Подскажите, какой файл необходимо править, чтоб добиться желаемого результата.

Спасибо!
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
\administrator\components\com_jshopping\controllers\products.php
Функция save.
Если не ошибаюсь то в строках 471-482 как раз и идет сохранение псевдонима
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

anti4anti

  • Новичок
  • 5
  • 0 / 0
Тоже мучаюсь с этой затеей, пока глухо.
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Тоже мучаюсь с этой затеей, пока глухо.
А в чем загвоздка-то?
Я же написал где искать.
Код
            if ($post['alias_'.$lang->language]!="" && !$_alias->checkExistAlias2Group($post['alias_'.$lang->language], $lang->language, $post['product_id'])){
                $post['alias_'.$lang->language] = "";
                JError::raiseWarning("", _JSHOP_ERROR_ALIAS_ALREADY_EXIST);
            }
Меняем на
Код
            if ($post['alias_'.$lang->language]!="" && !$_alias->checkExistAlias2Group($post['alias_'.$lang->language], $lang->language, $post['product_id'])){
                $post['alias_'.$lang->language] = "";
                JError::raiseWarning("", _JSHOP_ERROR_ALIAS_ALREADY_EXIST);
            }else{
            $post['alias_'.$lang->language] = "Тут писать любой Псевдоним, который применится если значение оставить пустым";
            }
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

AndreyUA

  • Захожу иногда
  • 61
  • 7 / 0
anti4anti, у меня пока тоже не получается.
Linfuby, "алиас" не есть "код товара". Это не те строки.

Если я не ошибаюсь, код товара - product_ean. Но в файле products.php такой строки нету.
« Последнее редактирование: 15.05.2012, 00:10:54 от AndreyUA »
*

anti4anti

  • Новичок
  • 5
  • 0 / 0
AndreyUA, нашел где это делается, но есть загвоздка.
/administrator/components/com_jshopping/views/product_edit/tmpl/info.php
Код
<td class="key">
         <?php echo _JSHOP_EAN_PRODUCT;?>
       </td>
       <td>
         <input type = "text" name = "product_ean" id = "product_ean" value = "<?php echo $row->product_ean?>" onkeyup="updateEanForAttrib()"; />
       </td>
изменил на
Код
<td class="key">
         <?php echo _JSHOP_EAN_PRODUCT;?>
       </td>
       <td>
         <input type = "text" name = "product_ean" id = "product_ean" value = "<?php if ($row->product_ean == ""){ echo 'test00' , $row->product_id;} else {echo $row->product_ean;} ?>" onkeyup="updateEanForAttrib()"; />   
       </td>
Но теперь проблема при создании нового товара, т.к. id ему присваивается только после сохранения. Нужно как то брать id последнего товара и прибавлять к нему 1, но в php я только начинаю осваиваться.
*

AndreyUA

  • Захожу иногда
  • 61
  • 7 / 0
Я считаю, это не совсем верное решение. Файлы в папке "views" отвечают только за формирование и вывод информации (как шаблон для конечного пользователя).
Нужно искать файл с функцией сохранения этого самого кода товара.
Точнее, может быть даже не функция, а строчка такого типа:
Код
$post[$product_ean] = $product_ean;
« Последнее редактирование: 15.05.2012, 12:19:28 от AndreyUA »
*

anti4anti

  • Новичок
  • 5
  • 0 / 0
AndreyUA, есть и такое но там мои усилия вообще ничем не увенчались, а так криво но работает.
/administrator/components/com_jshopping/controllers/products.php
Функция сейв примерно 688 строка.
« Последнее редактирование: 15.05.2012, 12:29:23 от anti4anti »
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Linfuby, "алиас" не есть "код товара". Это не те строки.
Виноват... Невнимателен...
Если НЕ пусто - сохранить товар с введёным кодом товара.
Если пусто - сгенерировать автоматически код такого содержания: M[id производителя]P[id товара].
Как там!? Немного воображения и логики? :)
\administrator\components\com_jshopping\controllers\products.php
Функция save, ищем следующий текст примерно 519 строка.
Код
        $product_id = $product->product_id;
Ниже добавляем
Код
        if (!$post['product_ean']) {
         $manufacturer_id = 0;
         if (isset($post['product_manufacturer_id'])){
         $manufacturer_id = $post['product_manufacturer_id'];
         }
         $product->product_ean = "M[".$manufacturer_id."]P[".$product_id."]";
        }
        if (!$product->store()){
            JError::raiseWarning("",_JSHOP_ERROR_SAVE_DATABASE."<br>".$product->_error);
            $this->setRedirect("index.php?option=com_jshopping&controller=products&task=edit&product_id=".$product->product_id);
            return 0;
        }
Радуемся результату.
« Последнее редактирование: 15.05.2012, 13:48:58 от Linfuby »
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

SDKiller

  • Живу я здесь
  • 2706
  • 329 / 5
  • ...ergo sum
Вообще в компоненте куча событий для плагинов.
Зачем хакать его?
*

anti4anti

  • Новичок
  • 5
  • 0 / 0
Linfuby, огромное спасибо)))
*

AndreyUA

  • Захожу иногда
  • 61
  • 7 / 0
Linfuby, спасибо! Работает как надо.
*

vic.blacksmith

  • Новичок
  • 8
  • 0 / 0
Linfuby, большое спасибо за ценную доработку.
*

Sni10

  • Захожу иногда
  • 110
  • 5 / 0
  • I am a law abiding citizen . . .
Linfuby, Спасибо большущее. 2 дня копошился в поиске. Надо бы внести в FAQ. Очень ценное решение. Особенно когда товаров под 10000
*

srg

  • Захожу иногда
  • 209
  • 41 / 1
Вообще в компоненте куча событий для плагинов.
Зачем хакать его?
Во, во, Вы же потом не обновите компонент...

Вот мой плагинчик по авто генерации кода товара. После установки заходим в плагин включаем его и вводим префикс несколько символов (ну сокращение по названию магазина, типа BigMart пусть bgm). Как формируется: авто генерация если не заполнено поле ean,  вид [префикс][id товара дополненное нулями до 6 символов], например id 175, тогда ean='bgm000175'  

[вложение удалено Администратором]
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Вот мой плагинчик по авто генерации кода товара.
логичнее было бы сделать это не после сохранения товара, а до
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

avduevsky

  • Захожу иногда
  • 61
  • 0 / 0
  • topall.com.ua
Во, во, Вы же потом не обновите компонент...

Вот мой плагинчик по авто генерации кода товара. После установки заходим в плагин включаем его и вводим префикс несколько символов (ну сокращение по названию магазина, типа BigMart пусть bgm). Как формируется: авто генерация если не заполнено поле ean,  вид [префикс][id товара дополненное нулями до 6 символов], например id 175, тогда ean='bgm000175' 

Прошу прощение за поднятие старой темы.
Но, нету ли у Вас решения для генерации кодов товаров в атрибутах?
*

Sni10

  • Захожу иногда
  • 110
  • 5 / 0
  • I am a law abiding citizen . . .
Прошу прощение за поднятие старой темы.
Но, нету ли у Вас решения для генерации кодов товаров в атрибутах?

Да по сути логика построения конструкции аналогичная к родительскому коду товара. Наверно нужно тоже самое (с другими переменными наверно) прописать в файле придания кода атрибутам. Вероятно это файлы сдесь же в папке контроллеров - attributes.php или attributesvalues.php или еще где? Если бы разработчики подсказали где ковырять - дальше методом тыка можно и самому попробовать.
*

Sorrowful

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
Здравствуйте уважаемые, подскажите пожалуйста как сделать следующее, чтобы при сохранении продукта его алиас формировался следующим образом: транслитерация названия продукта (то есть то что и происходит сейчас) и плюс добавить код продукта в конце, чтобы получилось вот так: product_name-ean.html
Зачем это все, возможно спросите Вы, дело в том, что в магазине есть много продуктов с одинаковыми названиями, и получается, что когда его сохраняешь, выдает ошибку что такой алиас уже существует.
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Sorrowful, просто ради интереса, Какие названия совпадают? Шоколад?
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

Sorrowful

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
нет)) Цвета красок для моделирования, в категории может быть несколько названий продукта например "Зеленый", несколько "Красный выцветший" и тому подобное. А код продукта у них разный.
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
за генерацию алиаса при сохранении товара отвечает строки ~517-527, в частности
Код
if ($jshopConfig->create_alias_product_category_auto && $post['alias_'.$lang->language]=="") $post['alias_'.$lang->language] = $post['name_'.$lang->language];
в файле \administrator\components\com_jshopping\controllers\products.php
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Sorrowful

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
Парни, не выходит прописать алиас как надо, не понимаю я пока синтаксиса php.
Linfubyпредложил такой код в начале этой темы

Код
 if ($post['alias_'.$lang->language]!="" && !$_alias->checkExistAlias2Group($post['alias_'.$lang->language], $lang->language, $post['product_id'])){
                $post['alias_'.$lang->language] = "";
                JError::raiseWarning("", _JSHOP_ERROR_ALIAS_ALREADY_EXIST);
            }else{
            $post['alias_'.$lang->language] = "Тут писать любой Псевдоним, который применится если значение оставить пустым";
            }
Помогите написать строчку после оператора else, чтобы если такой алиас уже существует, тогда задать алиас следующего вида: alias-product_ean. То есть алиас и через дефис артикул продукта.
Если посчитаете нужным, сообщите сумму которую Вы хотите получить за помощь.
Спасибо.
*

Sorrowful

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
Разобрался немного сам, правда не так как хотел, в общем изменил создалие алиаса на корню, а не через else

эту строчку
Код
$post['alias_'.$lang->language] = JApplication::stringURLSafe($post['alias_'.$lang->language]);

заменил на
Код
$post['alias_'.$lang->language] = JApplication::stringURLSafe($post['alias_'.$lang->language]."-".$post['product_ean']);

Если кому-то будет не лень, напишите правильный код через else, чтобы алиасы с артикулом на конце формировались лишь тогда, когда уже есть такой же без артикула
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Если кому-то будет не лень, напишите правильный код через else, чтобы алиасы с артикулом на конце формировались лишь тогда, когда уже есть такой же без артикула
Наверное как-то так?
Код
            $post['alias_'.$lang->language] = JApplication::stringURLSafe($post['alias_'.$lang->language]);
            if ($post['alias_'.$lang->language]!="" && !$_alias->checkExistAlias2Group($post['alias_'.$lang->language], $lang->language, $post['product_id'])){
                //Удалить эту строчку очищающую алиас
                $post['alias_'.$lang->language] = "";
                //Добавляем свое формирование алиаса, если такой алиас уже существует
                $post['alias_'.$lang->language] = JApplication::stringURLSafe($post['alias_'.$lang->language]."-".$post['product_ean']);
                //Сообщение о существовании такого псевдонима можно удалить.
                JError::raiseWarning("", _JSHOP_ERROR_ALIAS_ALREADY_EXIST);
            }
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

Sorrowful

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
Linfuby, большое тебе спасибо.
Как говорится, мир не без добрых людей.
Плюсую в репутацию.

PS надо все же выучить основы php, обычное ведь было логическое условие, а не знаешь синтаксиса и думай как его написать.
*

alex1988

  • Захожу иногда
  • 148
  • 0 / 0
Добрый день.

Подскажите по генирации алиаса в товарах и категориях.
Генерируеться сейчас только от названия, а нужно добавить ещё и id товара, т.к. товаров много и есть с одинаковым названием.
Код:
Код
<?php


defined( '_JEXEC' ) or die;

class plgJshoppingAdminGenerate_Alias extends JPlugin {

private function generateAlias($type) {
if (!isset($_POST['task']) || $_POST['task']!='generateAlias') {
return;
}
$app = JFactory::getApplication();
$cid = $app->input->get('cid', array(), 'array');
if (!count($cid)) {
$app->enqueueMessage(JText::_('JLIB_HTML_PLEASE_MAKE_A_SELECTION_FROM_THE_LIST'), 'error');
return;
}

if ($type == 'category') {
$table_name = '`#__jshopping_categories`';
} else if ($type == 'manufacturer') {
$table_name = '`#__jshopping_manufacturers`';
} else {
$table_name = '`#__jshopping_products`';
}
$select_id = $type.'_id';

$replace = $this->params->get('replace', 0);
$db = JFactory::getDBO();
$query = $db->getQuery(true)
->select('language')
->from('#__jshopping_languages')
->where('1');
$db->setQuery($query);
$allLanguage = $db->loadColumn();
if (!count($allLanguage)) {
$app->enqueueMessage(JText::_('PLG_JSHOPPINGADMIN_GENERATE_ALIAS_NO_LANGUAGE'), 'warning');
return;
}

$select = array();
foreach ($allLanguage as $language) {
$select[] = '`name_'.$language.'`';
$select[] = '`alias_'.$language.'`';
}
$query = $db->getQuery(true)
->select($select_id.' as id,'.implode(',', $select))
->from($table_name)
->where($select_id.' IN ('.implode(',', $cid).')');
$db->setQuery($query);
$elements = $db->loadObjectList();

if (!count($elements)) {
$app->enqueueMessage(JText::_('PLG_JSHOPPINGADMIN_GENERATE_ALIAS_NO_ELEMENTS'), 'warning');
return;
}

$query = 'CREATE TEMPORARY TABLE `jshopping_temp_table_for_generate_aliases` (id INT, '.implode(' VARCHAR(255),', $select).' VARCHAR(255), PRIMARY KEY (`id`)) DEFAULT CHARACTER SET utf8';
$db->setQuery($query);
$db->execute();

$insertValues = $updateValues = array();
$generated = 0;
foreach ($elements as $element) {
$insertValue = array();
$insertValue[] = $element->id;
foreach ($allLanguage as $language) {
$name = 'name_'.$language;
$alias = 'alias_'.$language;
$insertValue[] = $element->$name;
if ($element->$alias == '' || $replace) {
if ($element->$name != '') {
$insertValue[] = JApplication::stringURLSafe($element->$name);
$generated++;
} else {
$insertValue[] = '';
}
} else {
$insertValue[] = $element->$alias;
}
$updateValues[] = $table_name.'.'.'`'.$alias.'` = jshopping_temp_table_for_generate_aliases.`'.$alias.'`';
}
$insertValues[] = '("'.implode('","', $insertValue).'")';
}
$query = 'INSERT INTO jshopping_temp_table_for_generate_aliases VALUES '.implode(',', $insertValues);
$db->setQuery($query);
$db->execute();

$query = $db->getQuery(true)
->update($table_name.', jshopping_temp_table_for_generate_aliases')
->set($updateValues)
->where('jshopping_temp_table_for_generate_aliases.id = '.$table_name.'.'.$select_id);
$db->setQuery($query);
$result = $db->execute();

$app->enqueueMessage(JText::_('PLG_JSHOPPINGADMIN_GENERATE_ALIAS_UPDATE').$generated);
}

private function init($type) {
JFactory::getLanguage()->load('plg_jshoppingadmin_generate_alias', dirname(__FILE__));
JToolBarHelper::custom('generateAlias', 'refresh', 'refresh', JText::_('PLG_JSHOPPINGADMIN_GENERATE_ALIAS_BUTTON'), true);
$this->generateAlias($type);
}

function onBeforeDisplayListCategoryView(&$view) {
$this->init('category');
}

function onBeforeDisplayManufacturers(&$view) {
$this->init('manufacturer');
}

function onBeforeDisplayListProductsView(&$view) {
$this->init('product');
}

}
?>

Как я понимаю, вот тут идёт генирация от имени товара
Код
$insertValue[] = JApplication::stringURLSafe($element->$name);
и как сюда добавить product_id
П.С. это расширения от невигена.
« Последнее редактирование: 15.03.2014, 12:49:58 от alex1988 »
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
$element->$name.'-'.$element->id например
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

alex1988

  • Захожу иногда
  • 148
  • 0 / 0
блин....я всю ночь сидел мучался......и $element->$name.'-'.$element->product_id  делал, и кучу вариантов, а Ваш не пробовал.
Спасибо огромное, заработало.

Ну я так понимаю что ID в алиасе не портит картину с точки зрения SEO?
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
ну откуда ж там product_id, если
Цитировать
->select($select_id.' as id,'.implode(',', $select))

Ну я так понимаю что ID в алиасе не портит картину с точки зрения SEO?

думаю что нет. при апдейте наверное добавим настройку. либо в принципе можно в принудительном порядке при возникновении дубля.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Условие для кол-ва товара больше нуля

Автор kik84

Ответов: 3
Просмотров: 328
Последний ответ 16.02.2024, 13:33:24
от kit2m2
WT On fly image handler изображения товара JoomShopping в webp на лету

Автор sergeytolkachyov

Ответов: 9
Просмотров: 1534
Последний ответ 17.10.2023, 12:40:19
от sergeytolkachyov
Убрать модуль в карточке товара JoomShopping

Автор alexkraym

Ответов: 35
Просмотров: 4445
Последний ответ 21.08.2023, 07:17:53
от delchev
Проблема с фото в карточке товара

Автор astapon

Ответов: 18
Просмотров: 1625
Последний ответ 24.04.2023, 12:37:50
от kit2m2
Убрать ссылку в названии товара

Автор Jinrou

Ответов: 12
Просмотров: 1571
Последний ответ 13.03.2023, 06:48:07
от kit2m2