ContactoSkype
(+34) 649 288 190
EspañolEnglish
experto prestashop|freelance ajax|programador php/mysql|desarrollo prestashop
programador symfony | seo symfony | freelance symfonyLlámame | experto shopify | prestashop | experto seo barcelona
(+34) 649 288 190
freelance seo Español English
experto freelance oscommerce | desarrollo seo barcelona | programador oscommerce | freelance prestashop
Instalación contribuciones oscommerce | freelance seo | especialista e-commerce | freelance prestashop
Emprendedor Web
    experto prestashop | comercio electrónico | programación woocommerce
Programador E-Commerce Prestashop
freelance shopify | programador prestashop | programador shopify barcelona     
Prestashop
experto prestashop


 
 
 
 
 
 
 
 
 
 
 Características < 1.4
 Características > 1.4
 Modulos Prestashop
experto prestashop
programador prestashop | seo en barcelona
Shopify
experto prestashop


 
 
 
experto prestashop
programador shopify | freelance shopify
Symfony
experto prestashop


Selecciona 
Selecciona 
Selecciona 
Selecciona 
experto prestashop
symfony
osCommerce
experto prestashop


Guia osCommerce Español Guía
Boxes osCommerce Boxes
Mi Perfil 
Versiones osCommerce 
Comunidad osCommerce 
Contribuciones osCommerce Contribuciones
Guia SEO Tiendas Virtuales osCommerce SEO osCommerce
osCommerce Básico 
Experto osCommerce Experto osCommerce
osCommerce Español osCommerce Español
experto prestashop
programador oscommerce | freelance seo barcelona | especialista posicionamiento
Wordpress
experto prestashop


 
 
 
 
 
 
experto prestashop
programador wordpress | consultor wordpress seo | freelance wordpress
jQuery
experto prestashop


Selecciona 
Selecciona 
Selecciona 
Selecciona 
Selecciona 
Selecciona 
Selecciona 
Selecciona 
experto prestashop
jquery | técnicas seo | barcelona
Facebook Developers
experto prestashop


Selecciona 
Selecciona 
Selecciona 
experto prestashop
Facebook | php | html | css
Redes
experto prestashop


Selecciona Manual WiFiSlax
Selecciona Comandos Cisco
Selecciona Proteger red WIFI
Selecciona Passwords Routers
Selecciona Crackear WEP(Linux)
Selecciona Conexión sFTP en PHP
Selecciona Crackear WEP(Win)
experto prestashop
redes | consultor profesional | seo
Programación
experto prestashop


Selecciona Html
Selecciona 
Selecciona 
Selecciona 
experto prestashop
programación
Freelance Prestashop
experto prestashop


Ingeniería Web Prestashop
experto prestashop
información
Sígueme en Instagram
experto prestashop


experto prestashop
instagram | Cursos Prestashop | Ponentes expertos comercio electronico
boxCuriosidades Magento Españolbox
Curiosidades Magento Español

Detalles técnicos en Magento

 
Os muestro en esta sección aquellos detalles de programación en Magento que me he ido encontrando a nivel de curiosidad, que os pueden ser útiles en cualquier momento si desarrollais en magento o bien realizais algun detalle de administración. Curiosidades y Detalles Magento
 

Curiosidades Magento

Modelo - Vista - Controlador
1)  Modelo: Gestiona los datos y la lógica de la aplicación.
2)  Vista: Presenta el modelo en una representación adecuada para el usuario final.
3)  Controlador: El proceso que responde a eventos de usuario.
Handles - Blocks - Reference
HANDLES____

Si el nombre del tag es <default>, la aplicación sabe que sus actualizaciones de anidado se deben cargar en casi todas las páginas de la tienda antes de la carga de las páginas específicas de diseño ("casi todos" porque algunas páginas excepcionales, como la imagen del producto emergente no carga el diseño en el rango <default>).

Si Magento encuentra un tag distinto a <default> asignará las actualizaciones de anidado dentro de los tags de la página según indique el identificador. Por ejemplo, <catalog_product_view> contiene las actualizaciones de diseño para la página "ver producto", mientras que <catalog_product_compare_index> contiene los de la página de producto de comparación. Los tags están establecidos sin una comprensión amplia de la programación en Magento.


BLOCKS_____

Los atributos disponibles para <block> son los siguientes:

type - Este es el identificador de la clase de módulo que define la funcionalidad del bloque. Este atributo no debe ser modificado.

name - Este es el nombre con el que otros bloques puede hacer referencia al bloque en el que se asigna este atributo.

before (and) after - Se trata de dos formas de colocar un bloque de contenido dentro de un bloque estructural. before="-" y after="-" son comandos que se utilizan para colocar el bloque en consecuencia en la parte superior o inferior de un bloque estructural.

template - Este atributo determina la plantilla que representará a la funcionalidad del bloque en el que se asigna este atributo. Por ejemplo, si este atributo se le asigna "catalog/category/view.phtml, la aplicación se carga en app/design/frontend/template/catalog/category/view.phtml.

action - <acción> se utiliza para controlar las funcionalidades de la tienda tales como la carga o descarga de un JavaScript. Una lista completa de los métodos de acción muy pronto estarán disponibles, pero mientras tanto la mejor manera de aprender acerca de los métodos de acción es jugar con ellos en el diseño disponible.

as - Este es el nombre con el que una plantilla llama al bloque en el que se asigna este atributo. Cuando vea el getChildHtml (block_name) método de PHP llamado desde una plantilla, se refiere al bloque cuyo atributo "como" se le asigna "block_name el nombre. (Es decir, el método de getChildHtml("header")?> en la plantilla sería <block as="header">).


REFERENCE_____

<reference> se utiliza para hacer referencia a otro bloque. Al hacer una referencia a otro bloque, las actualizaciones dentro de <reference> se aplicarán al <block> correspondiente.
Para hacer la referencia, debe utilizar la referencia a un bloque con el atributo "name". Este atributo tendrá la etiqueta "name" del atributo <block>. Por lo tanto, si usted fuera a hacer una referencia por ejemplo a <reference name="right">, se dirigirá al bloque llamado name="right".

Mage::getModel
							Mage::getModel('core/store')
							
significa lo siguiente:

Coger modelo de app->code->core->Mage->Core->Model->Store.php
Layouts
<default> : será en todas las páginas por defecto

<catalog_category_default> : será la página de categorías

<catalog_category_layered> : será la página de categorías con filtros (los filtros serían a partir de atributos)

Css - Js
Añade css/js a partir de skin/frontend/default/default//nombre.js:

							<action method="addItem">
							  <type>skin_js</type>
							  <name>ajax_catalog_list/jquery-1-4-1.min.js</name>
							</action>
							
Añade css/js a partir de la raiz a la carpeta css o js segun addCss o addJs:

							//xml
							<action method="addCss"><stylesheet>my_ibanner/css/styles.css</stylesheet></action>
							<action method="addJs"><script>my_ibanner/jquery.pikachoose.js</script></action>
							
Migraciones Magento
Al migrar de un servidor a otro hay que tener en cuenta lo siguiente:

1)  El export con phpMyAdmin debes marcar el checkbox "Deshabilitar la revisión de las llaves extranjeras (foreign keys)". Si importas un SQL añadir --> SET FOREIGN_KEY_CHECKS = 0;

2)  Modificar el fichero app/etc/local.xml para modificar la nueva conexión de base de datos.

3)  Modificar de la tabla core_config_data de la base de datos los 2 siguientes registros:

   a) path: web/unsecure/base_url ponerle el dominio de donde cuelga el magento nuevo.
   b) path: web/secure/base_url ponerle el dominio de donde cuelga el magento nuevo.
Lenguajes Magento
Los lenguajes están en CSV's en app->locale->es_ES donde por código php se llama así:
							$this->__('Loading next step...');
							
donde en el CSV debes poner 2 campos en la misma linea separados por una coma (,) con el siguiente formato --> "Loading next step...", "Cargando ..."

Si quieres el proyecto en tu lenguaje debes bajarte el paquete primero desde http://www.magentocommerce.com/translations
Base de datos Magento
En app->etc->local.xml
Añadir bloque new products
Añadir el siguiente contenido en la parte administración, en CMS, el que tenga como id "home".
							//xml
							{{block type="catalog/product_new" name="home.catalog.product.new" alias="product_homepage" template="catalog/product/new.phtml"}}
							
Únicamente los productos marcados como "nuevos" usando las opciones "Set Product as New from Date" y "Set Product as New to Date" en la página de información general en el admin serán mostrados.
Añadir productos en Cesta
La adición de un producto simple

Por ID

Productos simples son más fáciles de añadir ya que hay menos opciones que deben ser enviadas. La estructura básica es la siguiente:

/path/to/app/checkout/cart/add?product=[id]&qty=[qty]

Donde [id] es el ID del producto y [qty] es la cantidad que desee agregar.

Para agregar un producto sencillo con opciones personalizadas simplemente añadir options[id]=[value] hasta el final. La estructura básica es la siguiente:

/path/to/magento/checkout/cart/add?product=$id&qty=$qty&options[$id]=$value


Por ejemplo:

http://magentoserver.com/checkout/cart/add?product=13&qty=1&options[12]=57

Puedes obtener el identificador de las opciones y su valor en la página del producto simple y sus desplegables.

Por SKU

Para agregar un producto por SKU, primero debemos crear una instancia de Mag::app() fuera de la presente aplicación. Puedes hacer esto así:

							//php
							include_once 'app/Mage.php';
							Mage::app();
							Mage::getSingleton('core/session', array('name' => 'frontend'));
							
Mediante la adición de una variable $_GET podemos obtener el sku y utilizar una instancia del modelo de producto para obtener el ID del producto.

							$cProd = Mage::getModel('catalog/product');
							$id = $cProd->getIdBySku("$sku");
							
Ahora que tenemos nuestro ID, podemos hacer algo útil con él - como añadirlo a la cesta con el valor por defecto de cantidad 1. Puede utilizar otras variables $_GET y condiciones para simular la adición de la cantidad de un producto mediante redirecciones header de PHP:

							//php
							header('Location: '. Mage::getUrl('checkout/cart/add', array('product' => $id)));
							
Adición de un paquete de productos

El formato de la URL para agregar un elemento del paquete a la cesta es el siguiente:

/path/to/app/checkout/cart/add/product/[id]/?bundle_option[[option_id]][]=[selection_id]

Tenemos que conseguir el option_id y selection_id la de la tabla catalog_product_bundle_selection en nuestra base de datos. La forma más sencilla de hacerlo es a través del módulo Core_Resource. Podemos utilizar nuestra página singleton en el ejemplo anterior para conectarse a la base de datos para una consulta.

							//Code
							$w = Mage::getSingleton('core/resource')->getConnection('core_write');
$result = $w->query("select `option_id`, `selection_id` from `catalog_product_bundle_selection` where `parent_product_id`=$id");

Esto nos dará nuestra conexión a la base de datos. Usando PDO y bucles para cada SKU dentro de un paquete ID dado nos encontramos que el siguiente código creará los parámetros para añadir a la cesta y luego redireccionar a la misma:

							$_product = Mage::getModel('catalog/product')->load($id);

							if ($_product->getTypeId() == 'bundle') {
							  $w = Mage::getSingleton('core/resource')->getConnection('core_write');
							  $result = $w->query("select `option_id`, `selection_id` from `catalog_product_bundle_selection` where `parent_product_id`=$id");
							  $route = "checkout/cart/add";
							  $params = array('product' => $id);
							  while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
							    $params['bundle_option['. $row[option_id] .']'][] = $row['selection_id'];
							  };

							  header("Location: ". Mage::getUrl($route, $params));
							}
							
http://www.your_domain.com/checkout/cart/add?product=68&qty=1&super_attribute[528]=55&super_attribute[525]=56

La adición de un producto configurable a través de Querystring

Para añadir un producto configurable a través de el carro de Querystring necesita un formato URL como el siguiente:

http://www.your_domain.com/checkout/cart/add?product=68&qty=1&super_attribute[528]=55&super_attribute[525]=56
Acceder a parámetros
$_GET, $_POST & $_REQUEST Variables en Magento

Accediendo variables Get – $_GET

							// Esto ...
							$productId = $_GET['product_id'];

							// ... es lo mismo que ...
							$productId = Mage::app()->getRequest()->getParam('product_id');

							// El segundo parametro de getParam te permite modificar un valor por defecto
							// El valor por defecto es retornado si el valor GET que tu estás buscando no existe
							$productId = Mage::app()->getRequest()->getParam('product_id', 44);

							Accediendo variables Post – $_POST

							// Esto ...
							$postData = $_POST;

							// ... es lo mismo que ...
							$postData = Mage::app()->getRequest()->getPost();

							// You can access individual variables like…
							if (isset($postData['product_id'])) {
							  echo $postData['product_id'];
							}
							
Manejar URLs
En admin Catalog->URL Rewrite management
URLs ficheros
De productos: catalog/product/view/id/191
De categorías: catalog/category/view/id/11
De Fabricantes: manufacturer/index/view/id/1933
De CMS: cms/page/view/id/**pageid**

Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_JS);
http://magento.demo/js/

Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK);
http://magento.demo/index.php/

Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA);
http://magento.demo/media/

Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN);
http://magento.demo/skin/

Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
http://magento.demo/

echo $this->getSkinUrl('images/content-top.png');
http://magento.demo/skin/frontend/default/default/images/content-top.png

Hacer bloques privados CMS
							//CMS
							{{block type="page/html" name="auth-redirect" as="auth-redirect" template="page/html/auth-redirect.phtml"}}
							
el código del block:
							  //Php
								Mage::getSingleton('customer/session')->setBeforeAuthUrl($this-> getRequest()-> getRequestUri());  //save requested URL for later redirection
								if(!Mage::getSingleton('customer/session')->isLoggedIn()) {  // if not logged in
								  header("Status: 301");
								  header('Location: '.$this->getUrl('customer/account/login')) ;  // send to the login page
								  exit;
								}
								
Loading del Admin
							#loading-mask {
							       color: #D85909;
							       font-size: 1.1em;
							       font-weight: bold;
							       opacity: 0.8;
							       position: absolute;
							       text-align: center
							       z-index: 500;
							}
							 #loading-mask .loader {
							       background: none repeat scroll 0 0 #FFF4E9;
							       border: 2px solid #F1AF73;
							       color: #D85909;
							       font-weight: bold;
							       left: 50%;
							       margin-left: -60px;
							       padding: 15px 60px;
							       position: fixed;
							       text-align: center;
							       top: 45%;
							       width: 120px;
							       z-index: 1000;
							}
							 <div style="left: -2px; top: 0px; width: 1423px; height: 813px;" id="loading-mask">
							       <p id="loading_mask_loader" class="loader"><img alt="Loading..." src="http://domain.com/skin/adminhtml/default/default/images/ajax-loader-tr.gif"><br>Please wait...</p>
							 </div>
							
Mensaje OK
							.success-msg {
								   background: url("images/success_msg_icon.gif") no-repeat scroll 10px 10px #EFF5EA !important;
								   border: 1px solid #95A486 !important;
								   color: #3D6611 !important;
							}
							<div id="messages">
								   <ul class="messages"><
									      <li class="success-msg">
										         <ul><li><span>The configuration has been saved.</span></li></ul>
									      </li>
								   </ul>
							</div>
							
Redimensionar imágenes
							//redimension width y height
							$this->helper('catalog/image')->init($_product, 'small_image')->resize(125);
							
Redimensionar imagen que no sea producto
ejemplo(app\code\core\Mage\Catalog\Model\Category.php):
								public function getResizedImage()
								{
									if(!$this->getImage())
										return false;

									$imageUrl = Mage::getBaseDir('media').DS."catalog".DS."category".DS.$this->getImage();
									if (!is_file($imageUrl) )
										return false;

									$imageResized = Mage::getBaseDir('media').DS."catalog".DS."category".DS."resized".DS.$this->getImage();
									if( file_exists($imageResized) )
										return dirname($this->getImageUrl())."/resized/".$this->getImage();

									if ( !file_exists($imageResized) && file_exists($imageUrl )) :
										$imageObj = new Varien_Image($imageUrl);
										$imageObj->constrainOnly(TRUE);
										$imageObj->keepAspectRatio(TRUE);
										$imageObj->keepFrame(FALSE);
										$imageObj->quality(100);
										$imageObj->resize(150, 150);
										$imageObj->save($imageResized);
									endif;

									return dirname($this->getImageUrl())."/resized/".$this->getImage();
								}
							
Tablas relacionadas Logs
Tablas que empiecen con log_* se pueden vaciar. Ocupan mucho. Y la tabla report_event.
Obtener items en cesta
							$count = $this->helper('checkout/cart')->getSummaryCount();
							
Crear módulo Best Seller
Crear en core/Mage/Catalog/Block/Product una nueva clase, por ejemplo Best.php

class Mage_Catalog_Block_Product_Best extends Mage_Catalog_Block_Product_Abstract { }

Crear en app/design/frontend/default/default/template/catalog/product/best.phtml

Llamar al bloque desde algun CMS, como el de home así por ejemplo:
							//CMS
							{{block type="catalog/product_best" name="home.bestsellers.list" alias="product_best_homepage" template="catalog/product/best.phtml"}}
							
Crear módulo Most Viewed
								Los mas vistos
								public function getMostViewedProducts()
								{
									/**
									 * Number of products to display
									 * You may change it to your desired value
									 */
									$productCount = 5;

									/**
									 * Get Store ID
									 */
									$storeId    = Mage::app()->getStore()->getId();

									/**
									 * Get most viewed product collection
									 */
									$products = Mage::getResourceModel('reports/product_collection')
										->addAttributeToSelect('*')
										->setStoreId($storeId)
										->addStoreFilter($storeId)
										->addViewsCount()
										->setPageSize($productCount);

									Mage::getSingleton('catalog/product_status')
											->addVisibleFilterToCollection($products);
									Mage::getSingleton('catalog/product_visibility')
											->addVisibleInCatalogFilterToCollection($products);

									return $products;
								}

								Mas vistos segun categoria actual
								public function getMostViewedProducts()
								{
									// number of products to display
									$productCount = 5;

									// store ID
									$storeId    = Mage::app()->getStore()->getId();

									// get most viewed products for current category
									$products = Mage::getResourceModel('reports/product_collection')
										->addAttributeToSelect('*')
										->setStoreId($storeId)
										->addStoreFilter($storeId)
										->addViewsCount()
										->addCategoryFilter(Mage::registry('current_category'))
										->setPageSize($productCount);

									Mage::getSingleton('catalog/product_status')
											->addVisibleFilterToCollection($products);
									Mage::getSingleton('catalog/product_visibility')
											->addVisibleInCatalogFilterToCollection($products);

									return $products;
								}

								Mas vistos los ultimos 30 dias
								public function getMostViewedProducts()
								{
									// number of products to display
									$productCount = 5;

									// store ID
									$storeId    = Mage::app()->getStore()->getId();

									// get today and last 30 days time
									$today = time();
									$last = $today - (60*60*24*30);

									$from = date("Y-m-d", $last);
									$to = date("Y-m-d", $today);

									// get most viewed products for last 30 days
									$products = Mage::getResourceModel('reports/product_collection')
										->addAttributeToSelect('*')
										->setStoreId($storeId)
										->addStoreFilter($storeId)
										->addViewsCount()
										->addViewsCount($from, $to)
										->setPageSize($productCount);

									Mage::getSingleton('catalog/product_status')
											->addVisibleFilterToCollection($products);
									Mage::getSingleton('catalog/product_visibility')
											->addVisibleInCatalogFilterToCollection($products);

									return $products;
								}
							
Módulo Ofertas
								protected function _getProductCollection()
							    {
							        if (is_null($this->_productCollection)) {
							            $layer = $this->getLayer();
							            /* @var $layer Mage_Catalog_Model_Layer */
							            if ($this->getShowRootCategory()) {
							                $this->setCategoryId(Mage::app()->getStore()->getRootCategoryId());
							            } else {
							            }

							            // if this is a product view page
							           if (Mage::registry('product')) {
							                // get collection of categories this product is associated with
							                $categories = Mage::registry('product')->getCategoryCollection()
							                    ->setPage(1, 1)
							                    ->load();
							                // if the product is associated with any category
							                if ($categories->count()) {
							                    // show products from this category
							                    $this->setCategoryId(current($categories->getIterator()));
							                }
							            } else {
							            }

							            $origCategory = null;
							            if ($this->getCategoryId()) {
							                $category = Mage::getModel('catalog/category')->load($this->getCategoryId());
							                if ($category->getId()) {
							                    $origCategory = $layer->getCurrentCategory();
							                    $layer->setCurrentCategory($category);
							                }
							            }
							            $this->_productCollection = $layer->getProductCollection();

							        	$todayDate  = Mage::app()->getLocale()->date()->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
							        	$this->_productCollection = Mage::getResourceModel('catalogsearch/advanced_collection')
							                ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes());

							        	$this->_productCollection->addAttributeToFilter('special_from_date', array('date' => true, 'to' => $todayDate))
							                ->addAttributeToFilter('special_to_date', array('or'=> array(
							                    0 => array('date' => true, 'from' => $todayDate),
							                    1 => array('is' => new Zend_Db_Expr('null')))
							                ), 'left');

							            $this->prepareSortableFieldsByCategory($layer->getCurrentCategory());

							            if ($origCategory) {
							                $layer->setCurrentCategory($origCategory);
							            }
							        } else {

							        }

							        return $this->_productCollection;
							    }

							
Mostrar current category en list.phtml
							//Clase Mage
							Mage::getModel('catalog/layer')->getCurrentCategory()->getId();
							 
							
Crear sesión frontend
							//Clase Mage
							Mage::getSingleton('core/session', array('name'=>'frontend'));
							 
							
Configurar diseño BLANK
En Package dejar "default"
En Themes poner todos a "blank"
Cambiar lenguajes de "Select" a "Banderas"
Modificar el layout page.xml de
								//XML Layout
								<block type="page/switch" name="store_language" as="store_language" template="page/switch/languages.phtml">
								a
								<block type="page/switch" name="store_language" as="store_language" template="page/switch/flags.phtml">
								
Añadir ruta en wysiwyg
<img src="{{media url="wysiwyg/mainbanner.jpg"}}" alt="" > hace referencia a la carpeta media de raiz.
<a href="{{store direct_url="about-magento-demo-store"}}">About Us</a>
Mostrar código moneda
									Mage::app()->getStore()->getCurrentCurrency()->getCurrencyCode();
								
Error--> Could not determine temp directory, please specify a cache_dir manually
									Hay que hacer lo siguiente:
										1) Crear una carpeta en raiz tmp/
										2) Modificar el siguiente fichero: app/code/core/Zend/Cache/Backend/File.php
										3) Change:
											protected $_options = array(
													'cache_dir' => 'null',

											to

											protected $_options = array(
													'cache_dir' => 'tmp/',
								
Cambiar password admin magento
									//SQL
									UPDATE admin_user SET password=CONCAT(MD5('qXpassword'), ':qX') WHERE username='admin';
								
Leer feeds Zend Framework
									//Dentro Magento
									$feed = Zend_Feed_Reader::import('http://domain.wordpress.com/feed/'); ?>
									$data = array(
									'title'        => $feed->getTitle(),
									'link'         => $feed->getLink(),
									'dateModified' => $feed->getDateModified(),
									'description'  => $feed->getDescription(),
									'language'     => $feed->getLanguage(),
									'entries'      => array()
									);

									foreach ($feed as $entry) {
										$edata = array(
											'title'        => $entry->getTitle(),
											'description'  => $entry->getDescription(),
											'dateModified' => $entry->getDateModified(),
											'authors'       => $entry->getAuthors(),
											'link'         => $entry->getLink(),
											'content'      => $entry->getContent()
										);
										$data['entries'][] = $edata;
									}

									echo "
";
									print_r($data['entries']);
									echo "
";
Tipos de bloque
Los tipos de bloque más comunes son los siguientes:

core/template = este bloque muestra un template definido por su atributo template. La mayoria de bloques definidos en el layout son de tipo, o subtipo core/template.
page/html = es un subtipo de core/template y define el bloque raiz (root). Todos los demas bloques son bloques hijos de este bloque. Como podemos ver en layout.xml:
page /html_head = define la seccion head de HTML, conteniendo los elementos JavaScript, CSS etc
page/html_header = define la parte de la página que contendrá el logo, links de la parte superior etc
page/template_links = este bloque muestra una lista de links, visible en el pie y la cabecera.
core/text_list = algunos bloques, como content, left, right son de tipo core/text_list. Cuando estos bloques son mostrados, todos sus bloques hijos son mostrados automáticamente, sin necesidad de utilizar el método getChildHtml().
page/html_wrapper = este bloque se utiliza para crear un bloque contenedor, que muestra sus bloques hijo dentro de una etiqueta HTML definida en la acción setHtmlTagName. Por defecto utiliza un

page/html_breadcrumbs = muestra los breadcrumbs de la página.
page/html_footer = muestra el area del pie, que contiene los links del pie, el mensaje del copyright etc
core/messages = este bloque muestra mensajes de error, noticias informativas etc
page/switch = este bloque puede ser utilizado para mostrar el selector de idioma, tienda etc

Cambiar € a la derecha del precio
Dentro de lib/Zend/Locale/Data/ tenemos que buscar el fichero xml que contiene a nuestro idioma. En ese caso abrimos el es.xml

Alrededor de la línea 2509 (así es como lo tengo yo que es al archivo default) tendremos este código:
									
										
											
												¤ #,##0.00
											
										
										{0} {1}
									
								


Lo que tenemos que mover es esto:

									¤ #,##0.00
								


por esto:

									#,##0.00 ¤
								
Cambiar vista por defecto ficha producto
1) Abrir app > design > frontend > default > deault > layout > catalog.xml
2) Buscar "Product view" y en las primeras lineas donde pone page/2columns-right.phtml, Cambiarlo por el layout que quiera: page/2columns-left.phtml por ejemplo, o 3columns.phtml.
SQL Magento No standard
								//Acceso a base de datos
								$write = Mage::getSingleton('core/resource')->getConnection('core_write');
								$qry = "SELECT password FROM admin_user WHERE username='" . $useradmin ."'";

								$resultat = $write->query($qry);
								$row = $resultat->fetch();
							
Eliminar bloque en layout
<remove name="left"/>
Obtener precio y precio oferta
								$special_preu = $_product->getData('special_price');
								$final_preu = $_product->getData('final_price');
							
Limpiar Cache
Magento mantiene su cache en /var/cache, localizada dentro del directorio de instalación. Para borrarla simplemente eliminamos todo el contenido de esa carpeta y recargamos el proyecto.
Sistema de Logs
System > Configuration > Developer
								Mage::log('My log entry');
								Mage::log('My log message: '.$myVariable);
								Mage::log($myArray);
								Mage::log($myObject);
								Mage::logException($e);
							
Aquí se almacenan: var/log/system.log
Quitar index.php de la URL
Sistema->Configuracion->Web->Optimización para motores de búsqueda Activar a Sí.
Configuración SMTP Magento
Step 1. Configurar Backend

Ir a backend > Configuration > System > smtp > (no te preocupes si es windows): smtp.securecerver.net y 25 como puerto

Step 2. Editar fichero del Core

Ir a app/code/core/Mage/Core/Model/Email/Template.php y …

Reemplaza:
								public function getMail()
								{
									if (is_null($this->_mail)) {
										 $this->_mail = new Zend_Mail('utf-8');
									}
							 		return $this>_mail;
								}
							

Por:
								public function getMail()
							    {
							        if (is_null($this->_mail)) {

										/*Start Hack*/
							           $my_smtp_host = Mage::getStoreConfig('system/smtp/host');
							           $my_smtp_port = Mage::getStoreConfig('system/smtp/port');
							           $config = array(
							                    'port' => $my_smtp_port, //optional - default 25
							                    'auth' => 'login',
							                    'username' => 'yourrelay@youremailhost.com',
							                    'password' => 'youremailpassword'
							                );
							            $transport = new Zend_Mail_Transport_Smtp($my_smtp_host, $config);
							            Zend_Mail::setDefaultTransport($transport);
							            /*End Hack*/

							            $this->_mail = new Zend_Mail('utf-8');
							        }
							        return $this->_mail;
							    }
							
Saber layout de cada página
ejemplo:
profileKey: mage::dispatch::controller::action::contacts_index_index

En app\code\core\Mage\Core\Controller\Varien\Action.php
								public function renderLayout($output='')
							    {
							        $_profilerKey = self::PROFILER_KEY . '::' . $this->getFullActionName();
							    	echo "profileKey: " . $_profilerKey . "
";
Uso de layout referente a un bloque
							<reference name="before_body_end">
							  <block type="googleanalytics/ga" name="google_analytics" as="google_analytics" />
							</reference>
							

Significa que va a buscar dentro de Mage->GoogleAnalytics->Block->ga.php y ejecuta la función _toHtml()
Poner breadcrumb en el header
								//Code
								echo $this->getLayout()->getBlock('breadcrumbs')->toHtml();
							
Añadir form_key en formularios
								//Code
								
							
Mostrar mensajes de error o success
								//Code
								echo $this->getMessagesBlock()->getGroupedHtml();
							
Links Destacados

Back to Top
Búsqueda Rápida
experto prestashop


Use palabras clave para encontrar el servicio deseado.
experto prestashop
buscar

Mi Messenger
experto prestashop


  • Gmail
  • Skype
  • Twitter
  • Movil/SMS
experto prestashop
mensajería
Los más Solicitados
experto prestashop


01.Instalacion Contribuciones osCommerce
02.Mantenimiento Tienda Prestashop
03.Aplicaciones Web 2.0
04.Seguridad WIFI
05.Alojamiento Web
06.Creacion Tiendas Virtuales
07.Mi Portfolio osCommerce
08.Mantenimiento Tienda Virtual osCommerce
09.Programador modulos Prestashop
10.Instalacion TPV
11.Administracion Redes
12.Administracion SPARX osCommerce
13.Conectividad Redes
experto prestashop
Registro para Practicas
experto prestashop


Estando registrado podras tener acceso a todas las prácticas, examenes y apuntes de mi carrera.
Ingeniería Tec. Informática de Gestión
experto prestashop
regístrate
Etig
experto prestashop


Usuario
Password
¿Has olvidado la contraseña?
experto prestashop
etig
Web's Amigas
experto prestashop
Selecciona
Selecciona
experto prestashop
urls
Ultimas Noticias

últimas noticias
Información
experto prestashop
experto prestashop
información
Comentarios
experto prestashop





Desarrollo E-Commerce
Pedro Escribano Rodríguez



17 años dando soporte E-Commerce a clientes. Con más de 150 clientes satisfechos a nivel internacional.
4,5 estrellas sobre un total de 89 opiniones
experto prestashop
Comentarios E-Commerce

Experto prestashop | programador oscommerce freelance | Consultor seo
Programador php | seo tiendas virtuales | comercio electrónico
Powered by experto php
En línea

Experto SEO Comercio Electrónico, Posicionamiento en buscadores, Experto osCommerce, Experto Desarrollo WEB Freelance, Aplicaciones Web PHP / MySQL