Czy Magento można skonfigurować w taki sposób, aby wiele widoków sklepu tej samej strony internetowej mogło korzystać z tego samegoincrement_id
zakresu numerów zamówień ? A jeśli tak, to w jaki sposób?
Na przykład przy konfiguracji multistore w następujący sposób core_store
:
store_id code website_id group_id
0 admin 0 0
1 alpha 1 1
2 bravo 2 2
3 charlie 2 2
Teraz dodano nowy widok sklepu delta
:
store_id code website_id group_id
4 delta 1 1
Przyjmując alpha
, że identyfikator ostatniego zamówienia to obecnie 1000123, jak osiągnąć:
next sell order number
alpha 1000124
delta 1000125
delta 1000126
alpha 1000127
To samo pytanie dotyczy wielu widoków sklepu z tym samym increment_id
zakresem numerów faktur i / lub z tym samym zakresem increment_id
numerów kredytu .
Czy Magento obsługuje to urządzenie od razu po wyjęciu z pudełka?
configuration
magento-1
multistore
Jürgen Thelen
źródło
źródło
Odpowiedzi:
Wyobrażam sobie, że byłoby to dość trudne. Identyfikatory inkrementów są przechowywane w
eav_entity_store
tabeli i nic dziwnego, że każdy sklep ma swój własny wpis, który jest aktualizowany po utworzeniu zamówienia (i wyceny, faktury itp.). Aby wszystkie sklepy korzystały z tego samego inkrementora, trzeba jakoś przepisać tę logikę, aby użyła tego samego wiersza w DB. Wpływ, jaki może to mieć na inne obszary witryny, należy wziąć pod uwagę.źródło
Mage::getModel('eav/entity_type')->loadByCode('invoice')->setIncrementPerStore(false)->save()
Możesz zastąpić model przyrostu zamówień, wysyłek, faktur i faktur korygujących, przepisując klasę „eav / entity_increment_numeric”, zapewniając niestandardową logikę w swoim modelu.
Spójrz na klasy przodków (Mage_Eav_Model_Entity_Increment_Numeric i Mage_Eav_Model_Entity_Increment_Abstract), aby zrozumieć, jak zapewnić własną logikę.
Możesz rozróżnić logikę między różnymi jednostkami, sprawdzając parametr $ entityTypeCode funkcji getNextId (), którą zastąpisz.
Innym (bardziej inwazyjnym) sposobem jest określenie innego modelu przyrostu dla każdego typu encji poprzez zastąpienie (za pomocą skryptu instalacyjnego) wartości kolumny „increment_model” tabeli „typ eav_entity_type”. Osobiście wolę wspomniane wyżej rozwiązanie „przepisz”.
Zwróć uwagę: identyfikatory przyrostu mają ograniczenie unikatowości w najnowszych wersjach Magento, więc nie możesz przechowywać tego samego identyfikatora przyrostu dla dwóch różnych encji tego samego typu. Innymi słowy, nie możesz mieć dwóch różnych faktur z tym samym identyfikatorem przyrostu.
Mam nadzieję, że to pomoże.
źródło
getLastId()
wMage_Eav_Model_Entity_Increment_Numeric
lub w jakiejkolwiek innej klasy lub interfejsu w hierarchii. Przy okazji, to powinna być zaakceptowana odpowiedź.Varien_Object
odMage_Eav_Model_Entity_Type
Podczas kopania głębiej zdałem sobie sprawę, że
eav_entity_type.increment_per_store
może to być pomocne.To jest. Ale tylko w przypadku, gdy chcesz, aby wszystkie widoki sklepu (globalnie, bez względu na to, w której witrynie są zdefiniowane) Twojej instalacji Magento, aby miały ten sam
increment_id
zakres numerów zamówień .To nie rozwiązuje mojego konkretnego problemu, ale może jest pomocne niektórym innym, więc zaczynamy:
Aby aktywować globalne udostępnianie numerów zamówień, ustaw
eav_entity_type.increment_per_store
jednostkę zamówienia na0
,Prowadzi to do
Mage_Eav_Model_Entity_Type::fetchNewIncrementId()
użyciastore_id = 0
podczas ładowaniaeav_entity_store
rekordu jednostki zamówienia, bez względu na to, do którego sklepu należy.Jeśli nie ma takiego rekordu istnieje, Magento tworzy jedną, wykorzystując
store_id
iincrement_prefix
od0
.To powinno działać dla każdego typu jednostki przy użyciu
eav/entity_increment_numeric
modelu, jakorder
,invoice
,shipment
icreditmemo
.Pamiętaj jednak, że nie znalazłem jeszcze żadnej oficjalnej dokumentacji
increment_per_store
. I że nie ma opcji w backendzie Magento, która pozwala ci to skonfigurować.Może to oznaczać, że nie jest oficjalnie używane.
Używaj na własne ryzyko. Jeśli twoje zmiany sieją spustoszenie, nie obwiniaj mnie. Zostałeś ostrzeżony ^^
źródło
Nie jest obsługiwany po wyjęciu z pudełka. Chciałem to zrobić raz, aby mieć drugi widok sklepu dla testu A / B współużytkującego ten sam increment_id z oryginalnego sklepu.
Próbowałem dopasować te 2 liczby w prosty sposób, kiedy
checkout_submit_all_after
został wystrzelony, ale czułem się z nim bardzo nieswojo, więc upuściłem go. Wydaje mi się, że przy większej liczbie wyświetleń sklepu i dużym natężeniu ruchu może to doprowadzić do prawdziwego bałaganu, więc musisz zagłębić się w logikę Magentos.źródło
Rozwiązanie:
Posiadanie odmiennego zamówienia / faktury / kredytu itp. ... zakres numerów jest całkiem niezły dla różnych krajów, co najczęściej oznacza na poziomie grupy sklepów.
Ale posiadanie różnych zakresów liczb na poziomie widoku sklepu jest złą rzeczą, jeśli używasz widoków sklepu dla różnych języków, co można zrobić w 90% wszystkich przypadków.
Na szczęście nie jest to takie trudne, jak zaproponowano w tym wątku:
Zamierzamy pobrać domyślny identyfikator widoku sklepu zamiast używać identyfikatora widoku sklepu, z którym wywoływana jest metoda . Robimy to, rozwiązując grupę sklepów dla bieżącego widoku sklepu i pobierając jej domyślny identyfikator widoku sklepu. Następnie każdy widok sklepu określonej grupy sklepów używa tego samego formatu zakresu liczb (ten z domyślnego widoku sklepu).
Utwórz tę klasę:
Dodaj to przepisanie do config.xml modułu:
Jeśli masz lepszy sposób, bez konieczności przepisywania, rozpowszechnij wiedzę. Baw się dobrze. Nie rąbaj rdzenia.
źródło
Użyj na magento2 ... WYBIERZ * OD
sales_sequence_meta
Wszystkie wiersze tabeli sekwencji są używane w tej samej tabeli przyrostowej Przykład „ciąg_ sekwencji_1” przykład:
sales_sequence_meta
ZESTAW AKTUALIZACJIsequence_table
= „kolejność_ sekwencji_1”. gdzie meta_id = ?? ()Uwaga: Opróżnij wszystkie poprzednie wiersze związane z wyceną i fakturą LUB Użyj w najwyższej tabeli sekwencja_w tej tabeli (kolejność__1, kolejność_0, kolejność_2)
źródło