Magento import product image

How to import product image with the magento import tools ?
It’s quite easy, when you know how to fill your import file and put your file in the right directory.

The directory : create if needed a /media/import/ direcory in your magento root file, in my case it’s /home/www/eshop/media/import/
Paths in the import tool are always relative to you media/import directory.

The imported file : on you image or small_image columns, you need to put your file name prefixed by a “/”.

Some examples:
picture file ==> string in the import file
/home/www/eshop/media/import/product1.jpg ==> /product1.jpg
/home/www/eshop/media/import/ProductPage/product1.jpg ==> /ProductPage/product1.jpg

Hope this will help you.

Développement d’un module magento avec Git et Modman

Ca fait donc un moment que j’utilise Git dans mes développements quotidiens et jusqu’à présent j’utilisais le fichier .gitignore pour sortir l’ensemble des fichiers de magento de mon repo.

Ensuite il me suffisait d’ajouter les fichiers de mon modules en utilisant le paramètre de forçage ce qui me donnait des trucs du style :

git add -f app/code/community/MonNamespace/MonModule/

Ca fonctionne .. c’est pas optimal et il faut pas oublier d’inclure à la main l’ensemble des fichiers…
Aujourd’hui j’ai décidé d’essayer un outil qui à priori est fait pour faire ce type de développement j’ai nommé modman

En résumé c’est un gros bash qui va s’occuper pour nous :

  • de gérer les interactions avec votre repository git en le clonant dans son répertoire .modman
  • de faire les liens symboliques du repository placé dans .modman et notre instance de Magento

Etape 1 – Création d’un repository git qui va contenir le code de notre module

Donc la première chose à faire est de créer votre nouveau bare repository git avec par exemple le fichier de configuration modman à l’intérieur.

Sur le serveur contenant git

mkdir <monrepot>.git
cd !$
git --bare init

Puis en local chez vous vous préparer à faire votre premier commit

cd /tmp
mkdir temporaire
cd temporaire
git init
git remote add origin <monserveur>/<monrepot>.git
touch modman
git add modman
git commit -f "Initial commit"
git push origin master

et voilà .. fin de la première étape .. votre repo git qui va contenir le module est prêt

Etape 2 – Initialisation de modman et clone

Bon maintenant il vous faut une version toute fraichement installé de magento pour commencer .. je vais pas vous expliquer comment faire .. c’est assez bien décrit ici ou ici

Vous êtes donc désormais dans le DocumentRoot de votre magento et on va commencer par :

  • Initialiser modman
    modman init
  • Cloner notre dépôt git
    modman clone '<monserveur>/<monrepot>.git'

Arrivé ici vous devriez avoir votre repo cloné dans .modman/

Etape 3 – Le fichier de configuration de modman

Le fichier de configuration de modman est relativement simple en gros on a par ligne

 <cible> <source>

Du coup on va commencer avec une configuration basique pour un module à savoir

app/etc/modules/Namespace_Module.xml       app/etc/modules/Namespace_Module.xml
app/code/community/Namespace/Module/       app/code/community/Namespace/Module/

On peut lancer ensuite la commande modman, à la racine de votre documentroot, qui va créer les liens symboliques

modman update <monrepot>

Vous devriez voir apparaître dans les répertoires concernés les liens symboliques mappés sur le repot (dans .modman/xxxx)

Voilà .. pour finir il ne faut pas oublier d’activer la gestion de la prise en compte des liens symboliques dans magento. Ca se passe dans le backend et plus particulièrement dans le menu Système>Configuration>Développeur>Paramètres de gabarit

Magento using core_config_data table

Core_config_data is a magento table used to save configuration and setting. It’s really helpfull and easy to use :

save or update a new entry :

$data = new Mage_Core_Model_Config();
$data->saveConfig('adin/ssid', 'value', 'default', 0);

and retrieve saved value :

$value = Mage::getConfig()->getNode('default/adin/ssid');

You may need to specify scope and scope code to retrieve the value

$value = Mage::getConfig()->getNode('default/sogen/file_number', 'default', 0 );

Update or create a value inside the installer (data, no sql)

  $installer->setConfigData('customer/address/prefix_show', 0);

Magento how to make a helper (and use it)

Creating a helper is quite easy, go on your /etc module directory and edit your config.xml file
ex : app/code/local/Adin/Epub/etc/config.xml
Add a block inside the <global> and after </blocks>

<?xml version="1.0"?>
<config>
	<modules>
		<Adin_Epub>
			<version>1.0.0</version>
		</Adin_Epub>
	</modules>
	
	<global>
		<helpers>
			<epub>
				<class>Adin_Epub_Helper</class>
			</epub>
		</helpers>
	</global>
	
</config>

Then creates the Helper folder on your module directory and create a data class :
app/code/local/Adin/Epub/Helper/Data.php

<?php
class Adin_Epub_Helper_Data extends Mage_Core_Helper_Abstract
{
    //fonction de test
    public function getTest()
    {
        return "Ceci est un test de helper";
    }	
}

If you create a new module, don’t forget to activate it, for that, in app/etc/modules directory, create or append a xml file and add your new module, for example :

<?xml version="1.0"?>
<config>
    <modules>
        <Adin_Epub>
            <active>true</active>
            <codePool>local</codePool>
        </Adin_Epub>
    </modules>
</config>

Now, for using your new helper, just instanciate it and call the function :

$helper = Mage::helper('epub');
echo $helper->getTest();

Magento : list all values of an attribute

You want to see all values of an attribute, for debug purpose or something else ?

$attr_model = Mage::getModel('catalog/resource_eav_attribute');
$attr_model->load(959); // you can find the attribute_id on the eav_attribute table
$options = $attr_model->getSource()->getAllOptions(false);
foreach($options as $value)
{
     print_r($value);
     echo "<br />";
}

You will get something like that :

Array
(
    [value] => 154
    [label] => 2008
)
Array
(
    [value] => 155
    [label] => 2009
)
Array
(
    [value] => 156
    [label] => 2010
)

Left join on addAttributeToFilter with EAV tables

When you want to filter a collection with custom attribute value it works but when you want to retrieve the non-corresponding entries (like with the neq, null, not null, …. statements) it doesn’t work.

Default join on collection is an inner join so if you are doing that :

$myCollection()->addAttributeToFilter('my_attribute', array('null' => true));

.. you will find no entries

If you want to change the default inner join to a left join you just have to add ‘left’ as the third parameter of the addAttributeToFilter method :

$myCollection()->addAttributeToFilter('my_attribute', array('null' => true), 'left');

and now it works…

Here is the prototype of the corresponding method in Mage_Catalog_Model_Resource_Product_Collection :

public function addAttributeToFilter($attribute, $condition = null, $joinType = 'inner')

We can see that inner parameter is used by default

Magento – display more than one image on page list

If you need to pull out more than one image per product in page list (list.phtml), the code below will help you.

<?php
  //get more images for product
  $product = Mage::getModel('catalog/product')->load($_product->getId());
  foreach ($product->getMediaGalleryImages() as $image) {
     echo "<img src='" . $this->helper('catalog/image')->init($this->getProduct(), 'thumbnail', $image->getFile())->resize(50) . "' />";
  }
?>

Remove index.php from URL .htaccess

How to remove index.php from URL using .htaccess file ?
That is this easy :

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[^/]*/index\.php [NC]
RewriteRule ^index\.php(.+) $1 [R=301,L]
</IfModule>

Maybe you are using a magento website and you need to keep index.php for the backoffice.
Then add this condition to the .htaccess file

RewriteCond %{REQUEST_URI} !^[^/]*/index\.php/admin.*

and don’t forget to enable rewrite module

a2enmod rewrite