php - extensions - ¿Cómo convertirse en un gurú de OpenCart?
opencart tutorial (4)
Guía de inicio rápido para desarrolladores de OpenCart 1.5.X para principiantes
Esta guía está escrita para desarrolladores que ya están familiarizados con PHP, OOP y la arquitectura MVC
A continuación, verá ejemplos para el lado del catálogo del carro. El lado de administración es idéntico en función a excepción de las vistas que se indican en la sección correspondiente
Comprensión de las bibliotecas
Se puede acceder a toda la funcionalidad de la biblioteca a través de Controlador, Modelo y Vistas utilizando $this->library_name
. Todos estos se pueden encontrar en la carpeta /system/library/
. Por ejemplo, para acceder a los productos actuales del carrito de compras, deberá usar la clase Cart
, que está en /system/library/cart.php
y se puede acceder usando $this->cart->getProducts()
Artículos de uso común
-
customer.php
- Funciones relacionadas con el cliente -
user.php
- Funciones relacionadas con el usuario administrador -
cart.php
- Funciones relacionadas con el carro -
config.php
- Todas las configuraciones se cargan desde este -
url.php
- Funciones de generación de URL
Comprender el parámetro de ruta
El marco de trabajo de OpenCart se basa en la route=aaa/bbb/ccc
en el parámetro de cadena de consulta para saber qué cargar, y es la característica subyacente para encontrar los archivos que necesita editar para cada página. La mayoría de las rutas solo usan el aaa/bbb
que debería verse como dos partes, sin embargo, algunas contienen tres partes aaa/bbb/ccc
La primera parte aaa
generalmente está relacionada con la carpeta dentro de una carpeta genérica como el controlador o las carpetas de plantillas. La segunda parte generalmente se relaciona con el nombre del archivo, sin la extensión pertinente .php
o .tpl
. La tercera parte se explica en la sección "Descripción de los controladores" a continuación
Entender idiomas
Los idiomas se almacenan en la carpeta /catalog/language/
en la subcarpeta de your-language
. Dentro de esto, los valores generales de texto utilizados en varias páginas se almacenan en el archivo your-language.php
dentro de la carpeta, por lo que para el idioma inglés en el lado del catálogo, encontrará los valores en catalog/language/english/english.php
. Para el texto de página específico, necesitará la route
de la página (generalmente este es el caso, pero no siempre, ya que puede especificar cualquier archivo de idioma que desee). Por ejemplo, la página de búsqueda tiene la ruta product/search
, y por lo tanto el texto específico del idioma para esa página se puede encontrar en catalog/language/english/product/search.php
(Observe que el nombre y la subcarpeta del archivo coinciden con la ruta seguida de .php
.
Para cargar el idioma en un controlador, usa
$this->language->load(''product/search'');
Luego puede usar la función de biblioteca de idiomas para recuperar textos de idiomas específicos, como
$some_variable = $this->language->get(''heading_title'');
Las variables de idioma se asignan en el archivo de idioma utilizando una variable especial $_
que es una matriz de claves y valores de texto. En su /catalog/language/english/product/search.php
debería encontrar algo similar a
$_[''heading_title''] = ''Search'';
Los valores en el archivo de idioma global english/english.php
se cargan automáticamente y están disponibles para su uso sin el método $this->language->load
Comprender los controladores
Los controladores se cargan según la route
y son bastante sencillos de entender. Los controladores se encuentran en la carpeta /catalog/controller/
. Continuando con el último ejemplo, el controlador para la página de búsqueda está en /product/search.php
dentro de esta carpeta. Observe nuevamente que se usa la ruta seguida por .php
.
Al abrir el archivo del controlador, verá un nombre de clase Pascal Case que extiende la clase Controller
, llamado ControllerProductSearch
. De nuevo, esto es específico de la ruta, con Controller
seguido del nombre de la subcarpeta y el nombre del archivo sin la extensión en mayúscula. La capitalización no es realmente necesaria, pero se recomienda para facilitar la lectura. Vale la pena señalar que los nombres de clase no toman ningún valor de la subcarpeta y el nombre del archivo que no sean letras y números. Se eliminan los signos de subrayado.
Dentro de la clase son los métodos. Los métodos en la clase declarada public
son accesibles para ser ejecutados a través de la ruta, los private
no. De forma predeterminada, con una ruta estándar de dos partes ( aaa/bbb
anterior), se llama a un método predeterminado de index()
. Si se utiliza la tercera parte de una ruta ( ccc
anterior), este método se ejecutará en su lugar. Por ejemplo, account/return/insert
cargará el archivo /catalog/controller/account/return.php
y la clase, e intentará llamar al método insert
Comprender los modelos
Los modelos en OpenCart se encuentran en la carpeta /catalog/model/
y se agrupan en función de la función, no de la ruta, y por lo tanto, tendrá que cargarlos en su controlador a través de
$this->load->model(''xxx/yyy'');
Esto cargará el archivo en la subcarpeta xxx
llamada yyy.php
. Está entonces disponible para usar a través del objeto
$this->model_xxx_yyy
y como con los controladores, solo puede llamar a sus métodos public
. Por ejemplo, para cambiar el tamaño de una imagen, debe usar el modelo de tool/image
y llamar a su método de resize
siguiente manera
$this->load->model(''tool/image'');
$this->model_tool_image->resize(''image.png'', 300, 200);
Comprender la asignación de variables en vistas desde el controlador
Para pasar valores a la vista desde el controlador, simplemente necesita asignar sus datos a la variable de $this->data
, que es esencialmente una matriz de pares clave => valor. Como ejemplo
$this->data[''example_var''] = 123;
Acceder a esto en una vista es un poco fácil de entender si está familiarizado con el método extract() que convierte cada clave en una variable. Entonces la clave example_var
convierte en $example_var
y se puede acceder como tal en la vista.
Comprender los temas
Los temas están disponibles solo para el lado del catálogo, y son básicamente una carpeta de plantillas, hojas de estilo e imágenes de tema. Las carpetas de temas se colocan en la carpeta /catalog/view/theme/
seguido del nombre del tema. El nombre de la carpeta no es importante con excepción de la carpeta default
El lado de administrador usa /admin/view/template/
(omitiendo el /theme/theme-name/
de la ruta, ya que no permite diferentes temas)
Los archivos de plantilla residen en una carpeta de template
dentro de la carpeta del tema. Si alguna plantilla no está disponible para el tema seleccionado en ese momento, la plantilla de la carpeta predeterminada se usa como alternativa. Esto significa que los temas se pueden crear con muy pocos archivos y aún funcionan completamente. También reduce la duplicación de código y problemas a medida que se realizan las actualizaciones
Comprensión de vistas (plantillas)
Al igual que con el lenguaje y los modelos, los archivos de vista generalmente están relacionados con la ruta, aunque no tienen que ser en absoluto. Las plantillas en el lado del catálogo generalmente se encuentran en /catalog/view/theme/your-theme/template/
menos que no exista, en cuyo caso se usarán las plantillas del tema predeterminado. Para nuestro ejemplo de página de búsqueda anterior, el archivo es product/search.tpl
. Para las rutas con tres partes, generalmente está en aaa/bbb_ccc.tpl
aunque no hay una regla establecida. En el administrador, la mayoría de las páginas siguen esto, con la excepción de que las páginas que enumeran elementos, como la página de lista de productos, están en catalog/product_list.tpl
y el formulario de edición del producto está en catalog/product_form.tpl
. Nuevamente, estos no están configurados, pero son un estándar para el carrito predeterminado.
El archivo de plantilla es de hecho solo otro archivo php, pero con una extensión .tpl y en realidad se ejecuta en el archivo controlador, por lo tanto, todas las cosas que puede codificar en un controlador se pueden ejecutar en un archivo de plantilla (aunque no se recomienda a menos que sea necesario)
Comprender el objeto de la base de datos
Las consultas se ejecutan usando
$result = $this->db->query("SELECT * FROM `" . DB_PREFIX . "table`");
DB_PREFIX
como su nombre indica es una constante que contiene el prefijo de la base de datos, si existe
$result
devolverá un objeto para consultas SELECT
, que contiene algunas propiedades
$result->row
contiene los datos de la primera fila si uno o más se devuelven como una matriz asociativa
$result->rows
contiene una matriz de resultados de fila, ideal para recorrer usando foreach
$result->num_rows
contiene la cantidad de resultados devueltos
También hay algunos métodos adicionales que el objeto $this->db
tiene
$this->db->escape()
usa mysql_real_escape_string() en el valor pasado
$this->db->countAffected
devuelve el número de filas afectadas por una consulta UPDATE
y así sucesivamente
$this->db->getLastId()
devuelve el último ID de incremento automático usando mysql_insert_id()
Comprender las variables reservadas
OpenCart tiene variables predefinidas para usar en lugar del estándar $_GET
, $_POST
, $_SESSION
, $_COOKIE
, $_FILES
, $_REQUEST
Y $_SERVER
$_SESSION
se edita usando $this->session->data
donde data es una matriz asociativa que imita $_SESSION
Se puede acceder a todos los demás usando $this->request
y se han "limpiado" para cumplir con las comillas mágicas activadas / desactivadas, por lo que
$_GET
convierte en $this->request->get
$_POST
convierte en $this->request->post
$_COOKIE
convierte en $this->request->cookie
$_FILES
convierte en $this->request->files
$_REQUEST
convierte en $this->request->request
$_SERVER
convierte en $this->request->server
Resumen
Si bien lo anterior no es una guía a prueba de balas para los desarrolladores, es de esperar que sirva como un buen punto de partida para los que comienzan
Parece que no tienen documentación, excepto algunas llamadas de API en sus foros oficiales. Tengo experiencia con Zend framework y CodeIgniter framework. ¿Pueden los maestros de OpenCart recomendarme la mejor manera de aprenderlo y dominarlo en el menor tiempo posible? Tengo que hacer un gran proyecto con él pronto.
Hay un sitio web Wiki de OpenCart con documentación para desarrolladores principiantes. Siga las direcciones URL que figuran a continuación para obtener más detalles:
http://wiki.opencarthelp.com/doku.php?id=start
http://wiki.opencarthelp.com/doku.php?id=methods_reference
Por ejemplo, la referencia del método tiene detalles para:
- Login del cliente
- Acceso DB
- Manejo de carrito de compras
- Config
- Cache
- Manejo de Moneda
Todavía hay algunas páginas en construcción, pero va a ser útil.
[Actualizar]
A partir de enero de 2018, el dominio opencarhelp.com está caído.
Métodos de biblioteca global: funciones básicas de la biblioteca de Opencart junto con sus funcionalidades. Se puede llamar a la mayoría de ellas desde cualquier lugar del catálogo o las carpetas de administración (controladores, modelos, vistas).
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 = array()) - 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 = '' > '') – 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'']
PHP es un lenguaje bastante grande con más de 5000 funciones incorporadas, por lo que una estrategia para aprender una nueva plataforma es identificar qué funciones utiliza con mayor frecuencia y dedicar un tiempo a conocerlas muy bien.
He realizado algunas consultas sobre el código fuente de OpenCart y las 10 funciones más utilizadas son:
array()
count()
explode()
implode()
mktime()
delete()
time()
date()
sprintf()
list()
Los 52 listados aquí, así como los comandos bash de Linux que puede usar en cualquier base de código para identificar las funciones que se usan comúnmente: https://www.antropy.co.uk/blog/efficient-learning-for-new-opencart-developers/