Trong khi đào sâu hơn, tôi nhận ra rằng eav_entity_type.increment_per_store
có thể hữu ích.
Nó là. Nhưng chỉ trong trường hợp này, khi bạn muốn tất cả các lượt xem cửa hàng (trên toàn cầu, bất kể trang web nào được xác định trong) cài đặt Magento của bạn để chia sẻ cùng một increment_id
phạm vi số thứ tự .
Điều này không giải quyết được vấn đề cụ thể của tôi, nhưng có lẽ nó hữu ích với một số người khác, vì vậy chúng tôi đi đây:
Để kích hoạt chia sẻ toàn cầu số thứ tự của bạn, hãy eav_entity_type.increment_per_store
đặt thực thể đơn hàng thành 0
,
Điều này dẫn đến Mage_Eav_Model_Entity_Type::fetchNewIncrementId()
việc sử dụng store_id = 0
khi tải eav_entity_store
bản ghi của thực thể đơn hàng, bất kể cửa hàng xem nó thực sự thuộc về cửa hàng nào.
Nếu không có hồ sơ như vậy tồn tại, Magento tạo ra một, sử dụng store_id
và increment_prefix
của 0
.
public function fetchNewIncrementId($storeId = null)
{
if (!$this->getIncrementModel()) {
return false;
}
if (!$this->getIncrementPerStore() || ($storeId === null)) {
/**
* store_id null we can have for entity from removed store
*/
$storeId = 0;
}
// Start transaction to run SELECT ... FOR UPDATE
$this->_getResource()->beginTransaction();
$entityStoreConfig = Mage::getModel('eav/entity_store')
->loadByEntityStore($this->getId(), $storeId);
if (!$entityStoreConfig->getId()) {
$entityStoreConfig
->setEntityTypeId($this->getId())
->setStoreId($storeId)
->setIncrementPrefix($storeId)
->save();
}
$incrementInstance = Mage::getModel($this->getIncrementModel())
->setPrefix($entityStoreConfig->getIncrementPrefix())
->setPadLength($this->getIncrementPadLength())
->setPadChar($this->getIncrementPadChar())
->setLastId($entityStoreConfig->getIncrementLastId())
->setEntityTypeId($entityStoreConfig->getEntityTypeId())
->setStoreId($entityStoreConfig->getStoreId());
/**
* do read lock on eav/entity_store to solve potential timing issues
* (most probably already done by beginTransaction of entity save)
*/
$incrementId = $incrementInstance->getNextId();
$entityStoreConfig->setIncrementLastId($incrementId);
$entityStoreConfig->save();
// Commit increment_last_id changes
$this->_getResource()->commit();
return $incrementId;
}
Điều này sẽ làm việc cho bất kỳ loại thực thể bằng cách sử dụng eav/entity_increment_numeric
mô hình, như order
, invoice
, shipment
và creditmemo
.
Mặc dù vậy, hãy lưu ý rằng tôi không thể tìm thấy bất kỳ tài liệu chính thức increment_per_store
nào. Và không có tùy chọn nào trong phần phụ trợ Magento cho phép bạn định cấu hình này.
Điều này có thể có hoặc không có nghĩa là nó không được sử dụng chính thức.
Sử dụng có nguy cơ của riêng bạn. Nếu những thay đổi của bạn tàn phá, đừng đổ lỗi cho tôi. Bạn đã được cảnh báo ^^