Man patīk to saukt par “Viesu izrakstīšanās nožēlu”. Tas ir brīdis, kad klients pabeidz izrakstīšanos kā viesis, lai saprastu, ka tas nozīmē, ka viņš nevar pieteikties vietnē, lai pārbaudītu pasūtījuma statusu. Tāpēc viņi nekavējoties izveido kontu un pēc tam sazinās ar klientu apkalpošanas dienestu, lai jautātu, vai viņu iepriekšējo viesu pasūtījumu var saistīt ar jauno klienta kontu.

Vai klientu apkalpošana nav brīnišķīga?

Lai gan Magento nenodrošina veidu, kā to izdarīt, izmantojot administratora paneli, tas ir salīdzinoši vienkārši, izmantojot pāris SQL vaicājumus. Vienkārši piesakieties savā izvēlētajā MySQL panelī (divas lieliskas iespējas ir phpMyAdmin un Adminer) un izpildiet šādus vaicājumus:

ATJAUNINĀT sales_flat_order SET customer_id = (JŪSU-KLIENTA-ID), customer_is_guest=0 WHERE entity_id = JŪSU PASŪTĪJUMA ID UN klienta_id IR NULL ATJAUNINĀJUMS sales_flat_order_grid SET customer_id = JŪSU KLIENTA ID WHERE entity_id = JŪSU- PASŪTĪJUMA ID

Vai vēlaties uzzināt, kā iegūt pareizās klienta_id un entity_id vērtības? Tas ir viegli. Lai iegūtu klienta_id, Magento administratorā dodieties uz Klienti > Pārvaldīt klientus. Atrodiet klientu, kuru meklējat, un noklikšķiniet uz tā, it kā jūs rediģētu viņu informāciju. Kad skatāt klienta informāciju, jūsu URL beigu daļa izskatīsies apmēram šādi:

/index.php/admin/customer/edit/id/3193/

Šajā piemērā klienta_id ir 3193. Lai atrastu entity_id pasūtījumam, kas tika veikts, izmantojot viesa izrakstīšanos, Magento administrēšanas panelī atveriet sadaļu Pārdošana > Pasūtījumi un noklikšķiniet uz pasūtījuma, lai skatītu detalizētu informāciju. Vēlreiz apskatiet URL beigās:

/index.php/admin/sales_order/view/order_id/16675/

Šajā piemērā pasūtījuma entity_id ir 16675. Izmantojiet savas vērtības iepriekš parādītajos SQL vaicājuma priekšrakstos, un viss būs iestatīts. Varat vēlreiz pārbaudīt, vai saistība ir izveidota, Magento administratora sadaļā atverot sadaļu Klienti > Pārvaldīt klientus, meklējot attiecīgo klientu, un jums vajadzētu redzēt, ka pasūtījums tagad ir daļa no viņa pasūtījumu vēstures.

H/T Fran un R.S pie Stack Overflow . Šeit nokopēts un paplašināts manai atsaucei.

Publicēja

Braiens Laimens

Braiens ir Vale Studios dibinātājs, kas patiesībā ir tikai skatuves vārds tam, kas ir bijusi lieliska ārštata pieredze. Braiens pašlaik strādā saskaņā ar īpašu līgumu ar lielisku e-komercijas mazumtirgotāju, taču viņš izmanto šo vietu, lai turpinātu publicēt idejas un pārdomas saistībā ar e-komerciju, mārketingu un Magento.

Ņemot Zend_ACL piemēru, es domāju, kā tas būtu jāorganizē projektam. Protams, piemērs ir jauks un veikls, bet īstā vietne ir daudz sarežģītāka.

$ = jauns ZendAcl(); $acl->addRole(new Zend_Acl_Role("viesis")); $acl->addRole(new Zend_Acl_Role("biedrs")); $acl->addRole(new Zend_Acl_Role("admin")); $vecāki = array("viesis", "biedrs", "administrators"); $acl->addRole(new Zend_Acl_Role("someUser"), $parents); $acl->add(new Zend_Acl_Resource("someResource")); $acl->deny("viesis", "someResource"); $acl->allow("biedrs", "someResource"); echo ($acl->isAllowed("viesis", "someResource") ? "atļauts": "liegts");

Ņemot vērā, ka katram manas vietnes kontrollerim/lapai būs sava veida piekļuves pārbaude, man ir nepieciešami globāli pieejami noteikumi. Vai tas nozīmē, ka man ir jāizveido liels konfigurācijas fails vai klase, lai iestatītu visus sāknēšanas noteikumus? Vai tas netērētu daudz atmiņas?

Bet, ja es iestatītu tikai noteikumus, kas nepieciešami katram kontrolierim, kas neļautu sasniegt ACL mērķi? Galvenais ACL izmantošanas iemesls ir izvairīties no atļauju izplatīšanas visā kodu bāzē:

Admin_Controller (publiskās funkcijas darbība() ( if($user->role !== "admin") ( die("nav atļauts"); ) ) )

Kā ar izmaiņām? Kā rīkoties, ja ACL kārtulas tiek glabātas datu bāzē, kur administrators var viegli mainīt atļaujas. Vai tiem visiem jāielādē katrs lapas pieprasījums? Vai tas neradītu lielu slodzi sistēmai?

Īsāk sakot, kā ACL darbojas lielā vietnē? Kādas problēmas rodas? Kā tiek apstrādātas kaskādes atļaujas?

Varat glabāt lomas datu bāzē un saglabāt objektu kešatmiņā atmiņā, izmantojot memcache, tāpēc, pievienojot vai mainot jaunas lomas, jums ir jāvaicā tikai db. Kas attiecas uz ACL ieviešanu, tā kā tas tiks izmantots visā sistēmā, varat to inicializēt vietnē Bootstrap.php un pēc tam saglabāt objektu Zend_Registry, lai tas būtu pieejams visai jūsu lietojumprogrammai.

Šos noteikumus var piemērot dažādos punktos. Varat izmantot maršrutus pielāgotā maršrutētājā vai, iespējams, augstāk kontrollera līmenī. Paplašinot Zend_Controller_Action, varat ievietot savus ACL noteikumus šim galvenajam kontrollerim, no kura tiek iegūts jebkurš cits kontrolleris. ACL atļaujas varat pārbaudīt, izmantojot metodi _init(). Sistēmā var būt arī citi punkti, kur jums ir nepieciešams ACL vai vēlaties to pārbaudīt atkarībā no tā, kā un kā jūs to izveidojat (tāpēc ACL saglabājat reģistrā).

Tas notiks, kad izmantojat e-komercijas vietni — lietotājs, kuram ir konts, norēķinās, kamēr viņš ir viesis, sazinās ar jums un vēlas, lai tie būtu saistīti. Jā, papildu darbs jums!

Programmā Magento nav noklusējuma funkcijas, kas ļautu saistīt šos divus kopā. (Sliktas ziņas, es zinu). BET, to var izdarīt. (ievietot šeit zvaigznīti)

Kā datubāzē pieslēgt Magento pasūtījumu klientam.
Ja klients izrakstās, kad ir pieteicies, tas notiek pēc noklusējuma. Tomēr, ja klients, izrakstoties, nepieteicās un vēlāk vēlas, lai pasūtījums būtu saistīts ar viņa kontu, veiciet šīs darbības, lai savienotu abus.

Risinājuma iespējas

Ir divi veidi, kā tam pieiet:

  1. Instalējiet paplašinājumu
  2. Manuāli rediģējiet datu bāzi

Saistīto klientu pasūtījums ar kontu, izmantojot Magento paplašinājumu

Es zinu, ka šim nolūkam ir pieejami paplašinājumi, taču es personīgi tos neesmu izmantojis, tāpēc es jums tādus neatbalstīšu, neieteikšu vai pat nesaistīšu. Bet nedaudz piepūles vajadzētu virzīt jūs pareizajā virzienā.

Atjaunināts 2016. gada 5. janvārī

Lai gan es iepriekš norādīju, ka man nav apstiprinājuma Magento paplašinājumam, lai saistītu klientu ar pasūtījumu, izmantojot Magento Admin, tagad es apstiprinu paplašinājumu. Es jūtos pārliecināts, ka to apstiprinu, jo es to uzrakstīju. Jā, tas ir nekaunīgs spraudnis. Bet tas ir bezmaksas paplašinājums, tāpēc tiešām tas ir labi, vai ne?

Magento paplašinājums, lai saistītu klientu ar viesa pasūtījumu

PromInc Magento paplašinājums klientu un pasūtījumu saistīšanai ir pieejams, izmantojot Github, un tam būs nepieciešama manuāla instalēšana, nevis Magento Connect izmantošana. Jūtieties brīvi lejupielādēt kodu, lai to pievienotu savai Magento instalācijai. Instalēšanas un lietošanas instrukcijas ir arī dokumentētas Github.

Saistiet klientu pasūtījumu ar kontu, izmantojot datu bāzi

Tomēr es jums pastāstīšu par to, kā manuāli veikt šo labojumu datu bāzē. Tomēr, lai to izdarītu, jums ir nepieciešama datubāzes piekļuve jūsu Magento vietnei, izmantojot PHP MyAdmin, trešās puses datu bāzes rīku, piemēram, MySql Workbench, NovaBench utt., vai piekļuvi komandrindai.

PIEZĪME: Ja jūs pilnībā apmaldījāt šis pēdējais teikums, es pieņemu, ka neesat izstrādātājs un/vai datu bāzes administrators, un tieši šajā vietā jums būtu vislabāk pagriezties un aiziet no šīs ziņas. :) Es necenšos būt rupjš, bet gan godīgāks. Šo rīku iestatīšanai ir nepieciešama jūsu tīmekļa mitinātāja konfigurācija un atbilstošas ​​zināšanas, lai zinātu, kā izmantot šos rīkus. Iesācējam nevajadzētu spēlēt datubāzē — ja nezināt, ko darāt, tajā varat radīt daudz nevēlamu rezultātu.

Labi, tiem, kas joprojām lasa un saprot, šeit ir risinājums, ko meklējat. Es zinu, ka šis risinājums darbojas Magento versijai 1.4.1 un jaunākai versijai.

Jums būs jāzina šāda informācija:

  • Klienta ID (customer_id)
    • Vienkāršākais veids, kā atrast klienta ID, ir skatīt klientu programmā Magento Admin un apskatīt šī klienta URL adreses joslā — klienta ID ir numurs URL beigās.
      https://www.yoursite.com/index.php/guru/customer/edit/id/ 200490 /
  • Pasūtījuma ID (entity_id)
    • PIEZĪME: Šis ir datu bāzes entītijas ID, NEVIS pasūtījuma ID, ko izmantojat savos rēķinos.
    • Vienkāršākais veids, kā atrast pasūtījuma ID, ir atvērt pasūtījumu programmā Magento Admin un adreses joslā apskatīt šī pasūtījuma URL — Pasūtījuma ID ir numurs URL beigās.
      https://www.yoursite.com/index.php/guru/sales_order/view/order_id/ 291855 /

Magento datu bāzē ir divas tabulas, kuras ir jāatjaunina:

  • pārdošanas_vienmērīgs_pasūtījums
  • sales_flat_order_grid
    • PIEZĪME: Es uzskatu, ka šī tabula tiek izmantota tikai Magento Admin

Ja izmantojat uz GUI balstītu datu bāzes rediģēšanas rīku, piemēram, MySQL Workbench, jums vienkārši ir jārediģē pasūtījuma ID ieraksts divās iepriekš minētajās tabulās, iestatot lauku customer_id uz iepriekš norādīto klienta ID.

Ja vēlaties to darīt, izmantojot SQL skriptu, varat izmantot divus šādus skriptus, aizstājot tos KLIENTA ID un pasūtījums ID ar atbilstošo informāciju, kas atrodama iepriekš.