решено Изменение ID покупок

danceban

danceban

Шопмейкер
#1
Привет,

помогите изменить ID покупок, который выводится по адресу index.php?route=account/order. По умолчанию это просто число которое увеличивается на 1 при совершении каждой покупки. Минус в том что все клиенты могут видеть по этому ID число покупок на сайте, а это я считаю не правильно. Можно ли выводить этот ID как сгенерированые буквы + ID или поменять шаг ID, чтобы было не +1, а +3 к примеру, как бы сделать не таким явным.

Спасибо
 

Вкладення

Останнє редагування модератором:
ALarik

ALarik

expert
#2
Здравствуй, напиши пожалуйста, какую логику ты хочешь иметь ? например возможно выводить номер счета, вместо ID заказа, тоесть в настройках магазина, указываешь свой набор, например: CКД-19
a7bc8ccfec-jpg.85 - opencart


или напиши свою логику, это реализуемо в пределах таблицы заказа.
 
Симпатії: Baco
OP
danceban

danceban

Шопмейкер
Thread Starter #3
Спасибо за отзыв, у меня в админке уже стоит INV-2019-00, но на скрине можно видеть что выводится. Если выводить номер счёта, клиенты будут путатся при оформлении возврата, так как там нужно указывать ID заказа. Либо как вариант менять и там ID на номер счёта. Сгенерировать какой-то 8 значный номер вместо ID нельзя? Хотя, ID должен быть уникальным..
 
ALarik

ALarik

expert
#4
у меня в админке уже стоит INV-2019-00, но на скрине можно видеть что выводится. Если выводить номер счёта, клиенты будут путатся при оформлении возврата, так как там нужно указывать ID заказа. Либо как вариант менять и там ID на номер счёта. Сгенерировать какой-то 8 значный номер вместо ID нельзя? Хотя, ID должен быть уникальным..
Можно по разному, например при просмотре заказов - выводить префикс счета + номер ID заказа, самый простой вариант, а при возврате, просто считывать префикс и игнорировать, а все что после префикса - принимать за ID заказа, тоесть будет что то типа для заказа №3:
INV-2019-3
 
Baco

Baco

architect
#5
Добавьте доп. поле в таблицу order с длинной в 8 символов и при формировании заказа, пусть туда вписывает
PHP:
md5($order_id);
c обрезкой на 8 символов, а в возврате - поиск по данному полю пусть осуществляет или по обоим
 
nuub

nuub

Шопмейкер
#6
Мова йде про рандомну генерацію унікального ID замовлення. Коли людина робить замовлення на сайті, то система генерує порядковий номер замовлення, який відрізняється на одиницю від попереднього. Як варіант прикрутити hesh генератор із імені+номера телефону
1566988723472-png.86 - opencart
 
OP
danceban

danceban

Шопмейкер
Thread Starter #7
Можно по разному, например при просмотре заказов - выводить префикс счета + номер ID заказа, самый простой вариант, а при возврате, просто считывать префикс и игнорировать, а все что после префикса - принимать за ID заказа, тоесть будет что то типа для заказа №3:
INV-2019-3
Этот вариант всёравно читаемый.
Добавьте доп. поле в таблицу order с длинной в 8 символов и при формировании заказа, пусть туда вписывает
PHP:
md5($order_id);
c обрезкой на 8 символов, а в возврате - поиск по данному полю пусть осуществляет или по обоим
Этот вариант кажется очень интересным, только я сам смогу лишь таблицу сделать, php не знаю, хоть и понимаю о чём идёт речь. 8 символов будет достаточно чтобы ID были уникальными?

Мова йде про рандомну генерацію унікального ID замовлення. Коли людина робить замовлення на сайті, то система генерує порядковий номер замовлення, який відрізняється на одиницю від попереднього. Як варіант прикрутити hesh генератор із імені+номера телефону
Переглянути вкладення 86
Думаю вариант Baco хватит с лихвой, так как ID уникальный и не зачем задейтсвовать данные клиентов.
 
Останнє редагування:
S

SlaSoft

Maestro
#8
Добавьте доп. поле в таблицу order с длинной в 8 символов и при формировании заказа, пусть туда вписывает
PHP:
md5($order_id);
c обрезкой на 8 символов, а в возврате - поиск по данному полю пусть осуществляет или по обоим
я бы crc16 использовал, но его увы нет в функциях php


А для более мощного "запутывания" md5(СОЛЬ . oreder_id)
 
S

SlaSoft

Maestro
#9
8 символов будет достаточно чтобы ID были уникальными?
Думаю, что нет

Основная проблема в Уникальности ключа!!!
более уникального чем автоинкремент - нет

вот вам еще вариант

INV-2019-3

INV-dd-mm-YYYY . token(9).

Т.е. вероятность случайного совпадения в течение одного дня практически 0 при малом количестве заказов
 
nuller

nuller

TeamLead
#11
я бы сделал вот так:
в файле catalog/model/checkout/order.php в строке 6:
PHP:
$order_id = $this->db->getLastId();
добавить следующий код:
PHP:
$prefix = $this->config->get('config_invoice_prefix') . $order_id;
       
$this->db->query("UPDATE `" . DB_PREFIX . "order` SET order_prefix = '" . $this->db->escape($prefix) . "', date_modified = NOW() WHERE order_id = '" . (int)$order_id . "'");
но перед этим, нужно сделать следующую команду в PHPmyAdmin:
SQL:
ALTER TABLE `oc_order` ADD `order_prefix` varchar(255) collate utf8_general_ci default NULL
а потом, выводить данные из этого поля в нужных местах по order_id, если вариант подходит, напиши где именно нужно выводить, распишу где и что добавлять.
 
S

SlaSoft

Maestro
#12
я бы сделал вот так:
в файле catalog/model/checkout/order.php в строке 6:
PHP:
$order_id = $this->db->getLastId();
добавить следующий код:
PHP:
$prefix = $this->config->get('config_invoice_prefix') . $order_id;
      
$this->db->query("UPDATE `" . DB_PREFIX . "order` SET order_prefix = '" . $this->db->escape($prefix) . "', date_modified = NOW() WHERE order_id = '" . (int)$order_id . "'");
но перед этим, нужно сделать следующую команду в PHPmyAdmin:
SQL:
ALTER TABLE `oc_order` ADD `order_prefix` varchar(255) collate utf8_general_ci default NULL
а потом, выводить данные из этого поля в нужных местах по order_id, если вариант подходит, напиши где именно нужно выводить, распишу где и что добавлять.
Вы кажется не поняли.. Здесь задача "скрыть" количество, которое формируется автоинкрементом
 
nuller

nuller

TeamLead
#13
Вы кажется не поняли.. Здесь задача "скрыть" количество, которое формируется автоинкрементом
Уважаемый, там не указано было "скрыть", ровно как и не указано так, как я предложил логику, так что попрошу поуважительней с обращением, пусть тс изложит конкретно задачу, получит и ответ.
По данному алгоритму, предложенному мной, можно вместо строки:
PHP:
$prefix = $this->config->get('config_invoice_prefix') . $order_id;
написать вот такую вот логику:
PHP:
$prefix = $this->config->get('config_invoice_prefix') . substr(hash("sha256", $order_id), 0, 8);
и насладиться полученными данными.

p.s. Вместо того, что бы хаять решения других, как вижу по другим темам, возьмите себе за привычку писать сразу решение, которое скопировал-вставил и получил рабочий скрипт, никаких обид, чисто продуктивный подход, а то уже достало, что на опенкартфоруме, надо 100500 сообщений пролистывать с такими вот "Вы кажется не поняли..", вместо того, что бы написать решение, получить + в репутацию и уважение коллег.
 
S

SlaSoft

Maestro
#14
возьмите себе за привычку писать сразу решение, которое скопировал-вставил и получил рабочий скрипт,
Не дождетесь

1. На вопрос как сделать я отвечаю ответом - как сделать, а не даю код для копипаст.

2.
По умолчанию это просто число которое увеличивается на 1 при совершении каждой покупки. Минус в том что все клиенты могут видеть по этому ID число покупок на сайте
там не указано было "скрыть",
А как вы понимаете то что написано в стартотопике?

3. Генерацию инвоойса предлагали сразу, но все проблема в том, что все, что связно с заказами работает по order_id

А номер инвойса доступен исключительно в самом заказе

Предложенное мною решение с изменением автоинкременте ничего не ломает, меняет номер заказа и на прямую не показывает количество..

Конечно, вычислить можно сделав, вчера, позавчера, но это бессмысленно. Тратить силы на вычисление.
А если это еще и высоконкурентная тематика со средним количесвтом заказов хотя бы 10-15, то покажет не плохую визуальную статиситку.

вместо того, что бы написать решение, получить
И чтоб второй раз не вставать
Если стоит вопрос: как сделать, то подразумевается, что человек собрался это делать сам, следовательно его скил позволяет это сделать. А получив методику решения, а не само решение (копипаст) тем самы повышает свой скил.

А если это есть реальная необходимость, а скила нет, или мало, то надо писать - ИЩУ ТОГО кто сделает.

вы привели в пример опенкартфорум, но покажите мне реальные ответы с официального форума, где также есть вопросы подобного плана.
 
#15
@nuller, спасибо за решение, но у нас политика свободного слова, не стоит указывать кому что делать и тогда вы не будете получать ответы, куда идти (сорян за каламбур), кому что удобно - тот пишет, главное по сути топика, возможно в таком русле и автор темы найдет оптимальное для себя решение, тут опытные специалисты собрались, нет такого как на официальном сайте или на опенкартфоруме, главное что бы рекламу - через рекламный раздел пускали, а в темах - не спамили !
За Ваше решение - спасибо, но проанализировав вопросы в темах, могу сделать вывод, что в гуру кодинга вам рановато, ничего личного, мнение со стороны, зато четкий ответ, расписанный Вами, могу расценить как проявление знания и грамотного кодинга и предлагаю выбрать статус под своим никнеймом, для персональной подписи, буду хлопотать Бако, что бы реализовал, так как в политике FIA предполагается поощрение талантов, в любой форме.
@SlaSoft и Вам спасибо, отдельно за разъяснение, надеюсь SEO Pro от chukcha в новом дистрибутиве тоже себя оправдает

p.s. Скрин века (не мой):
летние ребусы
 
Останнє редагування:
OP
danceban

danceban

Шопмейкер
Thread Starter #16
@nuller, спасибо за решение, но у нас политика свободного слова, не стоит указывать кому что делать и тогда вы не будете получать ответы, куда идти (сорян за каламбур), кому что удобно - тот пишет, главное по сути топика, возможно в таком русле и автор темы найдет оптимальное для себя решение, тут опытные специалисты собрались, нет такого как на официальном сайте или на опенкартфоруме, главное что бы рекламу - через рекламный раздел пускали, а в темах - не спамили !
За Ваше решение - спасибо, но проанализировав вопросы в темах, могу сделать вывод, что в гуру кодинга вам рановато, ничего личного, мнение со стороны, зато четкий ответ, расписанный Вами, могу расценить как проявление знания и грамотного кодинга и предлагаю выбрать статус под своим никнеймом, для персональной подписи, буду хлопотать Бако, что бы реализовал, так как в политике FIA предполагается поощрение талантов, в любой форме.
@SlaSoft и Вам спасибо, отдельно за разъяснение, надеюсь SEO Pro от chukcha в новом дистрибутиве тоже себя оправдает

p.s. Скрин века (не мой): Переглянути вкладення 87
О каком SEO Pro идёт речь? Я только хочу начать работу над новым заказом уже под BroCart. Там будут какие то принципиальные изменения? Или не ждать его и работать на нынешний BroCart?

Ну и самый - мамый правильный вариант

last_id = addOrder
ALTER TABLE oc_order AUTO_INCREMENT = (last_id + rand(2,5) )
Я не правильно выразился, мне нужна помощь в виде готового кода и ищу того кто сделает это. После внедрения и тестирования, выложим на форуме, может кому ещё понадобится.

Спасибо!
 
S

SlaSoft

Maestro
#22
это сарказм? или есть проблемы с публикацией?
Не, никоим образом.
Есть некая условная стоимость работы.
Человек просит ей поделиться.
1. Здесь все описано как сделать
2. На это потрачено мое время (в это время ч ничего не заработал, и.. мне она (задача) не нужна. Сделана чисто спортивного интереса, но тем не менее. И на данный момент оно моё.
3. Я предлагаю за умеренную сумму отдать в руки тому, кому нужна, но с условием, что он поделится с сообществом. Т.е. поделится уже своим..
@yura_co - почувствуй разницу - МОЁ и СВОЁ
 
OP
danceban

danceban

Шопмейкер
Thread Starter #24
Не, никоим образом.
Есть некая условная стоимость работы.
Человек просит ей поделиться.
1. Здесь все описано как сделать
2. На это потрачено мое время (в это время ч ничего не заработал, и.. мне она (задача) не нужна. Сделана чисто спортивного интереса, но тем не менее. И на данный момент оно моё.
3. Я предлагаю за умеренную сумму отдать в руки тому, кому нужна, но с условием, что он поделится с сообществом. Т.е. поделится уже своим..
@yura_co - почувствуй разницу - МОЁ и СВОЁ
Отписался в ЛС.
 
S

SlaSoft

Maestro
#25
В принципе, можно оставить все на месте

Здесь предлагали генерацию номера инвойса

но вот вам


SELECT HEX (AES_ENCRYPT (123, 'salt'));
SELECT AES_DECRYPT (UNHEX ('D1C455850D3D200387C728B84FD88985'), 'salt');


Т.е. Клиенту отсылать кодированый order_id
А на входе - декодировать

Но мест таких много.. Но как частное решение имеет право на жизнь
 
Зверху