Come diventare un guru OpenCart?

Sembra che non abbiano documentazione tranne alcune chiamate api sui loro forum ufficiali. Ho esperienza con framework Zend e framework CodeIgniter. Qualche maestro di OpenCart può consigliarmi il modo migliore per impararlo e padroneggiarlo nel più breve tempo ansible? Devo fare un grande progetto con esso presto.

OpenCart 1.5.X Developer guida rapida agli sviluppatori per principianti

Questa guida è scritta per gli sviluppatori che hanno già familiarità con PHP, OOP e l'architettura MVC

Di seguito, vedrai esempi per il lato catalogo del carrello. Il lato admin è identico in function con l'exception delle viste che è indicato nella relativa sezione


Comprendere le biblioteche

Tutte le funzionalità della libreria sono accessibili tramite Controller, Modello e Visualizzazioni utilizzando $this->library_name . Tutti questi possono essere trovati nella cartella /system/library/ . Ad esempio, per accedere ai prodotti del carrello degli acquisti correnti, è necessario utilizzare la class Cart , che si trova in /system/library/cart.php ed è ansible accedere utilizzando $this->cart->getProducts()

Oggetti usati comunemente

  • customer.php – Funzioni relative al cliente
  • user.php – Funzioni relative all'utente
  • cart.php – Funzioni relative al carrello
  • config.php – Tutte le impostazioni sono caricate da questo
  • url.php – Funzioni di generazione di URL

Capire il parametro del path

Il framework di OpenCart si basa sulla route=aaa/bbb/ccc nel parametro della string di query per sapere cosa caricare ed è la function di supporto per trovare i file che è necessario modificare per each pagina. La maggior parte delle route in realtà utilizza solo l' aaa/bbb che dovrebbe essere visto come due parti, tuttavia alcune contengono tre parti aaa/bbb/ccc La prima parte aaa generalmente correlata alla cartella all'interno di una cartella generica come il controller o le cartelle dei templates. La seconda parte di solito si riferisce al nome del file, senza l'estensione .php o .tpl . La terza parte è spiegata nella sezione "Capire i controller" di seguito


Comprendere le lingue

Le lingue sono memorizzate in /catalog/language/ cartella nella sottocartella della your-language . All'interno di questo, i valori di text generali usati su varie pagine sono memorizzati nel file your-language.php all'interno della cartella, quindi per la lingua inglese sul lato del catalogo, troverai i valori in catalog/language/english/english.php . Per il text di una pagina specifica, avrai bisogno del route per la pagina (Questo è generalmente il caso, ma non sempre, dato che puoi specificare qualsiasi file di lingua che ti piace). Ad esempio, la pagina di ricerca ha il product/search del path product/search , e quindi il text specifico della lingua per quella pagina può essere trovato in catalog/language/english/product/search.php (Notare il nome del file e la sottocartella corrispondono alla rotta seguita da .php .

Per caricare la lingua in un controller, si usa

 $this->language->load('product/search'); 

Quindi è ansible utilizzare la function di libreria della lingua per recuperare specifici testi di lingua, come ad esempio

 $some_variable = $this->language->get('heading_title'); 

Le variables di lingua sono assegnate nel file di lingua usando una variabile speciale $_ che è una matrix di chiavi e valori di text. Nel tuo /catalog/language/english/product/search.php dovresti trovare qualcosa di simile a

 $_['heading_title'] = 'Search'; 

I valori nel file di lingua globale english/english.php vengono automaticamente caricati e disponibili per l'uso senza il metodo $this->language->load


Capire i controller

I controller vengono caricati in base al route e sono abbastanza semplici da capire. I controller si trovano nella cartella /catalog/controller/ . Continuando dall'ultimo esempio, il Controller per la pagina di ricerca si trova in /product/search.php all'interno di questa cartella. Si noti nuovamente che viene utilizzata la rotta seguita da .php .

Aprendo il file del controller, vedrai un nome di class Pascal Case che estende la class Controller , chiamata ControllerProductSearch . Anche questo è specifico per il path, con Controller seguito dal nome della sottocartella e dal nome del file senza l'estensione maiuscola. La capitalizzazione non è effettivamente richiesta, ma è consigliata per una facile leggibilità. Vale la pena notare che i nomi di class non prendono alcun valore dalla sottocartella e dal nome del file diversi da lettere e numbers. I caratteri di sottolineatura vengono rimossi.

All'interno della class ci sono i methods. I methods nella class dichiarata public sono accessibili per essere eseguiti tramite la route – private non lo sono. Per impostazione predefinita, con una route a due parti standard ( aaa/bbb sopra), viene chiamato un metodo index() predefinito. Se viene utilizzata la terza parte di un path ( ccc sopra), verrà eseguito questo metodo. Ad esempio, account/return/insert caricherà il file /catalog/controller/account/return.php e la class, e provate a call il metodo insert


Comprensione dei templates

I templates in OpenCart si trovano nella cartella /catalog/model/ e sono raggruppati in base alla function, non al path e pertanto sarà necessario caricarli nel controller tramite

 $this->load->model('xxx/yyy'); 

Questo caricherà il file nella sottocartella xxx chiamata yyy.php . È quindi disponibile per l'utilizzo tramite l'object

 $this->model_xxx_yyy 

e come con i controller, puoi solo call i suoi methods public . Ad esempio, per ridimensionare un'image, dovresti usare lo tool/image model di tool/image e call il suo metodo di resize come segue

 $this->load->model('tool/image'); $this->model_tool_image->resize('image.png', 300, 200); 

Comprensione dell'assegnazione variabile nelle viste dal controller

Per trasferire i valori alla vista dal controller, è sufficiente assegnare i dati alla variabile $this->data , che è essenzialmente un arrays di chiavi => coppie di valori. Come esempio

 $this->data['example_var'] = 123; 

Accedere a questo in una vista è un po 'dovrebbe essere facile da capire se si ha familiarità con il metodo extract () che converte ciascuna chiave in una variabile. Quindi la chiave example_var diventa $example_var e si può accedere come tale nella vista.


Comprensione dei themes

I themes sono disponibili solo sul lato del catalogo e sono fondamentalmente una cartella di templates, fogli di stile e immagini a tema. Le cartelle dei themes sono posizionate nella cartella /catalog/view/theme/ seguito dal nome del tema. Il nome della cartella non è importnte con exception alla cartella default

Il lato admin usa /admin/view/template/ (salta il /theme/theme-name/ dal path in quanto non consente themes differenti)

I file di model risiedono in una cartella di template all'interno della cartella del tema. Se un model non è disponibile per il tema correntemente selezionato, il model della cartella predefinita viene invece utilizzato come fallback. Ciò significa che i themes possono essere creati con pochissimi file e funzionano ancora completamente. Riduce inoltre la duplicazione del codice e i problemi man mano che vengono effettuati gli aggiornamenti


Comprensione delle viste (templates)

Come nel linguaggio e nei templates, i file di visualizzazione sono generalmente correlati al path, sebbene non debbano essere affatto. I templates sul lato del catalogo si trovano solitamente in /catalog/view/theme/your-theme/template/ less che non esistano, nel qual caso verranno utilizzati i template del tema predefinito. Per il nostro esempio di pagina di ricerca sopra, il file è product/search.tpl . Per le rotte con tre parti, generalmente è in aaa/bbb_ccc.tpl sebbene non ci sia una regola hard set. Nell'amministratore, la maggior parte delle pagine segue questo, con l'exception che le pagine che elencano elementi, come la pagina di elenco dei prodotti, sono nel catalog/product_list.tpl e il module di modifica del prodotto è in catalog/product_form.tpl . Di nuovo, questi non sono impostati, ma uno standard per il carrello predefinito.

Il file template è in realtà solo un altro file php, ma con un'estensione .tpl ed è effettivamente eseguito nel file controller, quindi tutte le cose che puoi codificare in un controller possono essere eseguite in un file model (sebbene non raccomandato a less che non sia assolutamente necessario)


Comprendere l'object del database

Le query vengono eseguite utilizzando

 $result = $this->db->query("SELECT * FROM `" . DB_PREFIX . "table`"); 

DB_PREFIX come suggerisce il nome è una costante che contiene il prefisso del database se ne esiste uno

$result restituirà un object per le query SELECT , contenente alcune properties;

$result->row contiene i dati della prima row se uno o più vengono restituiti come arrays associativo

$result->rows contiene un arrays di risultati di row, ideale per il loop over usando foreach

$result->num_rows contiene il numero di risultati restituiti

Ci sono anche alcuni methods extra che l'object $this->db ha

$this->db->escape() usa mysql_real_escape_string () sul valore passato

$this->db->countAffected restituisce il numero di righe interessate da una query UPDATE e così via

$this->db->getLastId() restituisce l'ultimo ID di incremento automatico usando mysql_insert_id ()


Capire le variables riservate

OpenCart ha variables predefinite da utilizzare al posto dello standard $_GET , $_POST , $_SESSION , $_COOKIE , $_FILES , $_REQUEST E $_SERVER

$_SESSION è modificato usando $this->session->data where data è un arrays associativo che imita $_SESSION

È ansible accedere a tutti gli altri utilizzando $this->request e sono stati "puliti" per rispettare le virgolette abilitate / disabilitate, quindi

$_GET diventa $this->request->get

$_POST diventa $this->request->post

$_COOKIE diventa $this->request->cookie

$_FILES diventa $this->request->files

$_REQUEST diventa $this->request->request

$_SERVER diventa $this->request->server


Sommario

Mentre quanto sopra non è una guida a prova di proiettile per gli sviluppatori, si spera che servirà come un buon punto di partenza per coloro che iniziano

Metodi di libreria globali: funzioni di libreria opencart di base insieme alle relative funzionalità, la maggior parte di esse può essere richiamata da qualsiasi posizione nel catalogo o nelle cartelle di amministrazione (controller, templates, viste)

 CACHE $this->cache->delete($key) - Deletes cache [product, category, country, zone, language, currency, manufacturer] CART $this->cart->getProducts() Gets all products currently in the cart including options, discounted prices, etc. $this->cart->add( $product_id, $qty = 1, $options = arrays()) - Allows you to add a product to the cart $this->cart->remove( $key ) - Allows you to remove a product from the cart $this->cart->clear() - Allows you to remove all products from the cart $this->cart->getWeight() - Sum of the weight of all products in the cart that have require shipping set to Yes $this->cart->getSubTotal() - returns the subtotal of all products added together before tax $this->cart->getTotal() - returns the total of all products added together after tax $this->cart->countProducts() - returns the count of all product in the cart $this->cart->hasProducts() - returns true if there is at least one item in the cart $this->cart->hasStock() - returns false if there is at least one item in the cart that is out of stock $this->cart->hasShipping() - returns true if there is at least one item in the cart that requires shipping $this->cart->hasDownload() - returns true if there is at least one item in the cart that has a download associated CONFIG $this->config->get($key) - returns setting value by keyname based on application (catalog or admin) $this->config->set($key, $value) - set the value to override the setting value. DOES NOT SAVE TO DATABASE CURRENCY $this->currency->set($currency) - set or override the currency code to be used in the session $this->currency->format($number, $currency = '', $value = '', $format = TRUE) - format the currency $this->currency->convert($value, $from, $to) - convert a value from one currency to another. Currencies must exist $this->currency->getId() - get the database entry id for the current currency (1, 2, 3, 4) $this->currency->getCode() - get the 3-letter iso code for the current currency (USD, EUR, GBP, AUD, etc) $this->currency->getValue($currency) - get the current exchange rate from the database for the specified currency. $this->currency->has(currency) - Check if a currency exists in the opencart currency list CUSTOMER $this->customer->login($email, $password) - Log a customer in $this->customer->logout() - Log a customer out $this->customer->isLogged() - check if customer is logged in $this->customer->getId() - get the database entry id for the current customer (integer) $this->customer->getFirstName() - get customer first name $this->customer->getLastName() - get customer last name $this->customer->getEmail() - get customer email $this->customer->getTelephone() - get customer telephone number $this->customer->getFax() - get customer fax number $this->customer->getNewsletter() - get customer newsletter status $this->customer->getCustomerGroupId() - get customer group id $this->customer->getAddressId() - get customer default address id (maps to the address database field) DATABASE $this->db->query($sql) - Execute the specified sql statement. Returns row data and rowcount. $this->db->escape($value) - Escape/clean data before entering it into database $this->db->countAffected($sql) - Returns count of affected rows from most recent query execution $this->db->getLastId($sql) - Returns last auto-increment id from more recent query execution 4 DOCUMENT (*Called from controller only before renderer) $this->document->setTitle($title) - Set page title $this->document->getTitle()- Get page title $this->document->setDescription($description) - Set meta description $this->document->getDescription()- Get meta description $this->document->setKeywords()- Set meta keywords $this->document->getKeywords()- Get meta keywords $this->document->setBase($base) - Set page base $this->document->getBase() - Get page base $this->document->setCharset($charset) - Set page charset $this->document->getCharset() - Get page charset $this->document->setLanguage($language) - Set page language $this->document->getLanguage()- Get page language $this->document->setDirection($direction) - Set page direction (rtl/ltr) $this->document->getDirection()- Get page direction (rtl/ltr) $this->document->addLink( $href, $rel ) – Add dynamic <link> tag $this->document->getLinks()- Get page link tags $this->document->addStyle( $href, $rel = 'stylesheet', $media = 'screen' ) – Add dynamic style $this->document->getStyles()- Get page styles $this->document->addScript( $script ) - Add dynamic script $this->document->getScripts()- Get page scripts $this->document->addBreadcrumb($text, $href, $separator = ' &gt; ') – Add breadcrumb $this->document->getBreadcrumbs()- Get Breadcrumbs ENCRYPT $this->encryption->encrypt($value) - Encrypt data based on key in admin settings $this->encryption->decrypt($value) - Decrypt data based on key in admin settings IMAGE $this->image->resize($width = 0, $height = 0) JSON $this->json->encode( $data ) $this->json->decode( $data , $assoc = FALSE) LANGUAGE $this->language->load($filename); LENGTH $this->length->convert($value, $from, $to) - convert a length to another. units must exist $this->length->format($value, $unit, $decimal_point = '.', $thousand_point = ',') - format the length to use unit LOG $this->log->write($message) - Writes to the system error log REQUEST $this->request->clean($data) - Cleans the data coming in to prevent XSS $this->request->get['x'] - Same as $_GET['x'] $this->request->post['x'] - Same as $_POST['x'] RESPONSE $this->response->addHeader($header) - additional php header tags can be defined here $this->response->redirect($url) - redirects to the url specified TAX $this->tax->setZone($country_id, $zone_id) - Set the country and zone id for taxing (integer) $this->tax->calculate($value, $tax_class_id, $calculate = TRUE) - Calculate all taxes to be added to the total $this->tax->getRate($tax_class_id) - Get the rates of a tax class id $this->tax->getDescription($tax_class_id) - Get the description of a tax class id $this->tax->has($tax_class_id) - Check if a tax class id exists in opencart SESSION $this->session->data['x'] - Same as $_SESSION['x'] 

C'è un sito web OpenCart Wiki con documentazione per gli sviluppatori principianti. Segui gli URL indicati di seguito per ulteriori dettagli:

http://wiki.opencarthelp.com/doku.php?id=start
http://wiki.opencarthelp.com/doku.php?id=methods_reference

Ad esempio, il riferimento al metodo contiene dettagli per:

  1. accesso cliente
  2. Accesso DB
  3. Carrello di acquisto
  4. config
  5. nascondiglio
  6. Gestione delle valute

Ancora Ci sono alcune pagine in costruzione, ma sarà utile.

PHP è un linguaggio abbastanza ampio con oltre 5000 funzioni integrate, quindi una strategia per l'apprendimento di una nuova piattaforma consiste nell'individuare quali funzioni utilizza più frequentemente e passare un po 'di tempo a conoscerle molto bene.

Ho eseguito alcune query sul codice sorgente OpenCart e le prime 10 funzioni più comunemente utilizzate sono:

 arrays() count() explode() implode() mktime() delete() time() date() sprintf() list() 

Tutti i 52 elencati qui come i comandi bash di Linux che è ansible utilizzare su qualsiasi base di codice per identificare le funzioni di uso comune: https://www.antropy.co.uk/blog/efficient-learning-for-new-opencart-developers/