Come ottenere la chiave dell'URL di backend in Frontend?
-
12-12-2019 - |
Domanda
Ho bisogno di una pagina vuota per ricevere un post di Ajax e restituire JSON.
Se eseguo il codice sotto qualsiasi pagina di backend, il link apre una pagina vuota, che configura sul mio controller e router.
<?php echo Mage::helper('adminhtml')->getUrl('installments/adminhtml_ajax/'); ?>
.
Ma se corro in qualsiasi pagina del frontend, la chiave dell'URL non è la stessa e sono diretto al cruscotto.
Non so come ottenere l'URL corretto per il frontend, qualcuno avrebbe un'idea che funziona?
Esempi:
Backend = installments/adminhtml_ajax/index/key/000085c50c4882df8a9cae52c8392227/
Frontend = installments/adminhtml_ajax/index/key/99edadac5bc5bb1e2421d3be38db525e/
.
Router
<frontend>
<routers>
<installments>
<use>admin</use>
<args>
<module>Dexxtz_Installments</module>
<frontName>installments</frontName>
</args>
</installments>
</routers>
</frontend>
<admin>
<routers>
<installments>
<use>admin</use>
<args>
<module>Dexxtz_Installments</module>
<frontName>installments</frontName>
</args>
</installments>
</routers>
</admin>
.
Già cambiato il frontend per lo standard e nulla è cambiato.
Soluzione
Il key
nell'URL è generato in base alla sessione di amministrazione.
E non è possibile condividere le sessioni di amministrazione e frontale, ecco perché quando si effettua la chiamata dal frontend ottieni una chiave di sessione diversa.
Comunque, non è una buona pratica effettiva effettuare chiamate a backend Azioni dal frontend.
Dovresti avere 2 controller separati, uno per backend e uno per frontend.
Per non duplicare il codice, è possibile inserire tutto all'interno di un metodo in un aiutante e semplicemente chiamare quel metodo in entrambi i controller.
Altri suggerimenti
Il tuo anteriore e amministratore <routers>
(<frontName>installments</frontName>
) non dovrebbe essere lo stesso.
Sono due modi per configurare i moduli di amministrazione
1) Dato un altro nome anteriore
<admin>
<routers>
<installments>
<use>admin</use>
<args>
<module>Dexxtz_Installments</module>
<frontName>admin_installments</frontName>
.
2) Metti il tuo modulo prima / dopo AMMINHTML
<admin>
<routers>
<adminhtml>
<args>
<modules>
<Company_Adminhtml before="Mage_Adminhtml">Company_Adminhtml</Company_Adminhtml>
.