Magento (1.9) EAV a gyakorlatban (frontend)

A Magento alatt ez a következőképpen néz ki: 

  • entity tábla (meghatározza az entity-t)
  • attribute tábla (meghatározza a tulajdonságot, annak típusát, egyéb opciókat, pl.: source model, type, input, label)
  • value tábla (ez valójában típusonként szét van választva, többek között az indexelhetőség, keresés miatt pl.: catalog_product_entity_int, catalog_product_entity_varchar stb.)

A tulajdonságokat tárolhatnánk a fő-táblában is, nem?

Az EAV adatmodellben az elemekhez való új tulajdonságok felvitele során nem kell az eredeti entity táblát módosítani, így egyrészt elkerülhetők a túl nagy táblák, ezzel a lekérdezések sebessége is gyorsabb lesz, másrészt pedig a listáknál a felesleges adatok nem jelennek meg, csak amelyeket mi hozzáadunk a collection-höz. A cikk során egy modult fogunk készíteni, admin és frontend felülettel, EAV megoldással.

Miután a webáruházunkat feltelepítettük a szerverre, és konfiguráltuk azt (base url, database name, database user stb.), minden megjelenik rendeltetésszerűen, elkezdjük a fejlesztést.

Modulunk definilásához, az app/etc/modules könyvtárban kell létrehozni egy a module nevével megjelölt xml fájlt. Az én esetemben ez az Aion_Items.xml, a codePool pedig local, de a community codePool-ban is elhelyezhetnénk.

Az xml a következőképpen néz ki:

 

<?xml version="1.0"?>
<config>
    <modules>
        <Aion_Items>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Core/>
            </depends>
        </Aion_Items>
    </modules>
</config>

 

Ez még nem elég, a module még cache-ürítés után sem fog megjelenni, az admin-felület modul-listájában sem. A következő lépés, hogy az xml-ben definiált modult, a codePool-ban megadott könyvtárban létrehozzuk. Ez ebben az esetben, az app/code mappában jelent egy local könyvtárat (amennyiben még nem létezik), azon belül egy Aion/Items mappaszerkezetet. Tehát a végső elérésünk ebben az esetben app/code/local/Aion/Items.

module_path

 

A következő lépésekben a fő irányadók az általános modulkészítés szabályai, pár eltéréssel. Ha nem jut eszedbe éppen valami, nem szégyen puskázni a Magento core modulok tartalmából :)

Hozzuk létre a modul config.xml fájlt. Haladjunk lépésről lépésre:

 

<?xml version="1.0" encoding="UTF-8" ?>
<config>
    <modules>
        <Aion_Items>
            <version>0.0.1</version>
        </Aion_Items>
    </modules>
</config>

 

Definiáljuk a modellek, resource modellek elérhetőségét, illetve az entity táblá(ka)t a modulunknak. Folytatólagosan a </config> node elé helyezzük el a következőket, közvetlenül a </modules> node után:

 

<global>
    <models>
        <aion_items>
            <class>Aion_Items_Model</class>
            <resourceModel>aion_items_resource</resourceModel>
        </aion_items>
        <aion_items_resource>
            <class>Aion_Items_Model_Resource</class>
            <entities>
                <article>
                    <table>aion_items_article</table>
                </article>

 

Nem zártuk még le az <entities> node-ot, továbbra is ezen belül maradunk, és meghatározzuk a többi, EAV adattáblát, típusonként:

 

            <article_datetime>
                <table>aion_items_article_datetime</table>
            </article_datetime>
            <article_decimal>
                <table>aion_items_article_decimal</table>
            </article_decimal>
            <article_int>
                <table>aion_items_article_int</table>
            </article_int>
            <article_text>
                <table>aion_items_article_text</table>
            </article_text>
            <article_varchar>
                <table>aion_items_article_varchar</table>
            </article_varchar>
            <article_char>
                <table>aion_items_article_char</table>
            </article_char>
        </entities>
    </aion_items_resource>
</models>

 

Majd pedig a helper-ek, block-ok elérése, definiálása következik:

 

<helpers>
    <aion_items>
        <class>Aion_Items_Helper</class>
    </aion_items>
</helpers>
<blocks>
    <aion_items>
        <class>Aion_Items_Block</class>
    </aion_items>
</blocks>

 

Most, hogy a tábláink létre is jöjjenek, szükség lesz az erőforrások megadására, ami az installer és adatbázis-kapcsolat meghatározását jelenti, folytatólagosan a </blocks> alá tehetjük, de az számít, hogy ezek egy szinten legyenek.

 

        <resources>
            <aion_items_setup>
                <setup>
                    <module>Aion_Items</module>
                    <class>Aion_Items_Model_Resource_Setup</class>
                </setup>
            </aion_items_setup>
        </resources>
    </global>
</config>

 

Láthatóan le is zártam a node-okat, a következő lépések az alap helper (ez nagyon fontos(!), e nélkül nem fog működni a modulunk), majd a modellek létrehozása lesz. Az xml-ben megadottak szerinti helyen kell ezeket létrehozni. A modelleket tehát az Aion/Items/Model, a helper-t pedig az Aion/Items/Helper mappában.

A modulhoz tartozó default helper a Data nevet viseli minden esetben, a

Mage::getHelper(‘aion_items’) ezt próbálja meg példányosítani amely egyenértékű a Mage::getHelper(‘aion_items/data’) hívással.

Helperünk tehát az Aion_Items_Helper_Data osztálynevet, Data fájlnevet viseli, és a Mage_Core_Helper_Abstract osztályból származtatjuk.

Hozzuk létre a modelleket, és resource modelleket!

Az <entities> alatt az article-t határoztuk meg, így legyen a modellünk is ez, hozzuk létre az

  • Aion_Items_Model_Article
  • Aion_Items_Model_Resource_Article
  • Aion_Items_Model_Resource_Article_Collection osztályokat.

Mivel EAV adatmodell mellett döntöttünk, így nem a szokásos Mage_Core_Model_Resource_Abstract, és Mage_Core_Model_Resource_Db_Collection_Abstract osztályokból származtatjuk ezeket, hanem az eddigiek sorrendjében a következő osztályokból:

  • Mage_Eav_Model_Entity_Abstract
  • Mage_Eav_Model_Entity_Collection_Abstract

A resource model-ben van még egy kis változás:

 

class Aion_Items_Model_Resource_Article extends Mage_Eav_Model_Entity_Abstract
{
const ENTITY = ‘aion_items_article’;

public function __construct()
{
$this->setType(self::ENTITY)
->setConnection(‘core_read’, ‘core_write’);
}
}

 

Nem véletlenül maradt ki a felsorolásból az első modell (Aion_Items_Model_Article). Ezt továbbra is a Mage_Core_Model_Abstract osztályból származtatjuk, nincs változás. Ha megvannak a modellek, még az installer osztályt kell létrehozni. Ezt már szintén megadtuk a modul alap-konfigurációs fájljában (Aion_Items_Model_Resource_Setup). Hozzuk létre a megfelelő helyen, tartalma pedig legyen a következő:

 

class Aion_Items_Model_Resource_Setup extends Mage_Eav_Model_Entity_Setup
{
    public function getDefaultEntities()
    {
        $entityAttributes = array(
            Aion_Items_Model_Resource_Article::ENTITY => array(
                'entity_model' => 'aion_items/article',
                'attribute_model' => '',
                'table' => 'aion_items/article',
                'attributes' => array(
                    'name' => array(
                        'type' => 'varchar',
                        'label' => 'Name',
                        'input' => 'text',
                        'global' => 0,
                        //this set the attribute to store entity data separated to every store not globally
                        'visible' => true,
                        'required' => true,
                        'user_defined' => true,
                        'visible_on_front' => true
                    ),
                    'customer_id' => array(
                        'type' => 'integer',
                        'label' => 'Customer',
                        'input' => 'select',
                        'global' => 1,
                        'visible' => false,
                        'required' => true,
                        'user_defined' => true,
                        'visible_on_front' => false,
                        'source' => 'aion_items/article_attribute_source_customer'
                    ),
                ),
            )
        );

        return $entityAttributes;
    }
}

 

Ezeket a tulajdonságokat fogja létrehozni a telepítő lefutáskor az entity típushoz. A fenti tulajdonság opciókon felül, természetesen van más lehetőség is, de mivel ezek jelen esetben nem térnek el default értékeitől, nem szükséges megadni.

A customer_id tulajdonságnál látható, hogy megadtuk a source opciót, így ehhez szükségünk lesz egy source modellre. Hozzuk létre tehát a megadott helyen és néven, az app/code/local/Aion/Items/Model/Article/Attribute/Source mappában a Customer.php fájlt, tartalma pedig legyen a következő:

 

class Aion_Items_Model_Article_Attribute_Source_Customer extends Mage_Eav_Model_Entity_Attribute_Source_Table
{
    public function getAllOptions()
    {
        if (!$this->_options) {
            $customers = Mage::getResourceModel('customer/customer_collection')
                ->addAttributeToSort('lastname', 'ASC')
                ->addAttributeToSort('firstname', 'ASC');
            foreach ($customers as $customer) {
                $name = [$customer->getFirstname(), $customer->getLastname()];
                $this->_options[] = ['value' => $customer->getId(), 'label' => join(' ', $name)];
            }
        }
        return $this->_options;
    }
}

 

Ahhoz, hogy ezek után létrehozzuk a táblánkat, már csupán az installerünk kell létrehozni. Ezt a saját modulunk alatti sql, azon belül pedig a <resources> node alatt definiált mappában kell megtenni. Mivel ebben az esetben ez az <aion_items_setup>, így a mappa is  aion_items_setup lesz.

A modulunk config.xml fájljában korábban megadtuk a verziót, <version> node-ban, ez lesz az installer-ünk verziószáma. Hozzunk létre tehát egy install-0.0.1.php fájlt az app/code/local/Aion/Items/sql/aion_items_setup mappában.

Ennek a tartalma a következő:

 

try {
    $this->startSetup();
    $this->createEntityTables('aion_items/article');
    $this->addEntityType(Aion_Items_Model_Resource_Article::ENTITY, [
        'entity_model' => 'aion_items/article',
        'attribute_model' => '',
        'table' => 'aion_items/article',
        'increment_model' => '',
        'increment_per_store' => '0'
    ]);

    $this->installEntities();
    $this->endSetup();
} catch (Exception $e) {
    Mage::logException($e);
}

 

Ha ezzel megvagyunk, készen áll a modul a telepítésre. Mielőtt azonban lefuttatnánk, nézzük meg a mappa- és fájlszerkezetünket, mely a következőképpen néz ki:

 

files_in_module_1

 

 

Hogy modulunk installer-e lefusson, az admin felületen System -> Cache management menüpont alatt, ürítsük a cache-t. Amennyiben sikeresen lefutott az installer, a következő táblákat kell látnunk az alap táblákon felül az adatbáziskban.

 

eav_tables

 

 

Hogy biztosra menjünk, kapcsoljuk be a logolást az admin-felületen az installer futtatása előtt, illetve utána nézzük meg a var/log mappát, exception.log vagy system.log fájlok találhatóak-e benne. Ezenfelül az eav_attribute táblában az attribute_id szerint csökkenőbe rendezve láthatjuk, hogy a customer_id, és name jellemzőink létrejöttek-e, illetve mellette az entity_id mezőben láthatjuk, hányas ID-t kapta az új entity típusunk. Rákattintva meg is tekinthetjük azt.

Ha eddig minden rendben zajlott, csináljunk egy frontend oldalt a modulunknak, hogy letesztelhessük, minden helyesen működik-e. A <global> node alatt, de még a </config> node előtt helyezzük el a következő kód-blokkot:

 

<frontend>
    <routers>
        <aion_items>
            <use>standard</use>
            <args>
                <module>Aion_Items</module>
                <frontName>aionitems</frontName>
            </args>
        </aion_items>
    </routers>
</frontend>

 

A frontend oldali megjelenítéshez szükségünk van még layout, controller, block, és template fájlra. Ugyan ezen <frontend> node alá helyezzük el a layout fájl definiálását:

 

<layout>
    <updates>
        <aion_items>
            <file>aion/items.xml</file>
        </aion_items>
    </updates>
</layout>

 

Ezek után a fájlt hozzuk létre annak helyén (app/design/frontend/rwd/default/layout). Fontos, hogy a modulunkhoz tartozó alap template fájlokat mindig a témához tartozó default alatti layout könyvtárban hozzuk létre, hogy a későbbi módosításkor annak másolatán, ne pedig az eredeti fájlon hajtsanak végre módosításokat. Ugyanez érvényes a template fájlokra is.

 

<?xml version="1.0"?>
<layout version="0.1.0">
    <aion_items_index_index translate="label">
        <label>Aion Items</label>
        <reference name="root">
            <action method="setTemplate"><template>page/1column.phtml</template></action>
        </reference>
        <reference name="content">
            <block type="aion_items/list" name="aion.items.list" as="aion_items_list" template="aion/items/index.phtml"/>
        </reference>
    </aion_items_index_index>
</layout>

 

Ha ez is megvan, jön a template fájl és a block. Template fájlnak az xml-ben az aion/items/index.phtml-t jelöltük meg, így egy szinttel fentebb, az app/design/frontend/rwd/default/template/aion/items mappában helyezzük el az index.phtml fájlt, majd az app/code/local/Acion/Items/Block könyvtárban helyezzünk el egy List.php fájlt amelynek tartalma a következő legyen:

 

class Aion_Items_Block_List extends Mage_Core_Block_Template
{
    /**
     * @return \Aion_Items_Model_Resource_Article_Collection
     * @throws \Mage_Core_Exception
     */
    public function getArticleCollection()
    {
        $articles = Mage::getModel('aion_items/article')->getCollection()
            ->addAttributeToSelect('*');

        return $articles;
    }
}

 

Most térjünk vissza az index.phtml template fájlra, és egyelőre legyen a következő a tartalma:

/** @var Aion_Items_Block_List $this */
$articles = $this->getArticleCollection();
Zend_Debug::dump($articles->getData(),'articles');

 

Hogy megjelenjen a collection tartalma, már csak egy controller-re van szükségünk, hozzuk létre az IndexController.php fájlt az app/code/local/Aion/Items/controllers mappában, az alábbi tartalommal:

 

class Aion_Items_IndexController extends Mage_Core_Controller_Front_Action
{
    /**
     * @return $this
     */
    public function indexAction()
    {
        $this->loadLayout();
        $this->renderLayout();

        return $this;
    }
}

 

Ezután ismét ürítsük a cache-t az admin-felületről, és a frontenden hívjuk meg a modulunkhoz tartozó url-t (a példabeli esetben ez a /aionitems/ ami egyenértékű a /aionitems/index/index/ hívással). Ha minden jól ment, akkor valami hasonlót kell látnod:

 

frontend_display

 

 

Ez eddig szuper, de semmi sem jelenik meg lényegében, hiszen nincs semmilyen adat a táblában. Hogy szemléletesebb legyen a példa, írjunk még egy data-installer-t, hogy láthassuk, működnek-e a jellemzőink is megfelelően.

Az egyik előző képen látható volt egy data mappa, ennek a mappának pontosan ez a szerepe, a nem rendszer-szintű módosításokat ezeken keresztül tudjuk megoldani. Szerkezetben az sql könyvtárhoz kapcsolódik, így ezen belül is szükség van egy aion_items_setup almappára.

A „sima” installer-script-hez képest még annyi eltérés van a működésben, hogy az ezen struktúra alatt lévő fájlokat a Magento egy data- előtaggal keresi.

Tehát az app/code/local/Aion/Items/data/aion_items_setup mappában hozzunk létre egy (mivel már az install-0.0.1.php lefutott) data-upgrade-0.0.1-0.0.2.php nevű fájlt, és az app/code/local/Aion/Items/sql/ mappában szintén egy upgrade-0.0.1-0.0.2.php nevű fájlt. Ez utóbbiban csak megjelöljük, mi történik és hol. Tehát az upgrade-0.0.1-0.0.2.php a következőt tartalmazza:

 

/** @var Aion_Items_Model_Resource_Setup $this */
try {
    $this->startSetup();
    //app\code\local\Aion\Items\data\aion_items_setup\data-upgrade-0.0.1-0.0.2.php
    $this->endSetup();
} catch (Exception $e) {
    Mage::logException($e);
}

 

Az app/code/local/Aion/Items/data/aion_items_setup/data-upgrade-0.0.1-0.0.2.php pedig a következőket tartalmazza:

 

/** @var Aion_Items_Model_Resource_Setup $this */
try {
    $defaultStoreId = Mage::app()->getDefaultStoreView()->getId();
    $attributeSet = Mage::getResourceModel('eav/entity_attribute_set_collection')
        ->addFieldToFilter(
            'entity_type_id',
            Mage::getModel('eav/entity')
                ->setType(Aion_Items_Model_Resource_Article::ENTITY)
                ->getTypeId()
        )->addFieldToFilter(
            'attribute_set_name',
            'Default'
        )->getFirstItem();
    $articles = [
        [
            'store_id' => $defaultStoreId,
            'name' => 'Article name 1',
            'attribute_set_id' => $attributeSet->getId(),
        ],
        [
            'store_id' => $defaultStoreId,
            'name' => 'Article name 2',
            'attribute_set_id' => $attributeSet->getId(),
        ]
    ];
    foreach ($articles as $article) {
        Mage::getModel('aion_items/article')->setData($article)->save();
    }
} catch (Exception $e) {
    Mage::logException($e);
}

 

Ez még nem elég. Ha frissítünk, nem fut le az új installer, de már le sem kell írnom, hogy a cache-t ürítsük :) Ezenfelül pedig ugye még a modulhoz tartozó config.xml fájlban a <version> node alatt szereplő 0.0.1-et növeljük 0.0.2-re, majd frissítsük az oldalt. Ha minden rendben ment (és reméljük, hogy igen), akkor a következőt kell látnod az adatbázisban:

 

data_installed

 

 

Az aion_items_article_varchar táblában pedig külön szerepelnek a nevek az entitásokhoz tartozóan.

 

data_eav_installed

 

Ha minden rendben ment, a frontenden a frissítést követően a következőt láthatjuk:

 

frontend_display_data

 

Összegzés

Azt hiszem, nem mondok nagy butaságot ha kijelentem, hogy az EAV egy nagyon hasznos ugyanakkor  komplex dolog, amire az esetek nagy részében nincs szükség. A többnyire kis, illetve közepes fejlesztések ‒ mivel általában eleve több, egymáshoz kapcsolódó tábláról van szó ‒ nem indokolják ezt a szerkezeti felépítést.

Érdemes azonban ezt már az elején lefektetni, mivel ‒ ahogy a Magento maga is teszi saját ezen struktúrában tárolt adataival ‒ ezeket lehet egy generált, a szükséges adatokat megjelenítő összesítő táblában tárolni (flat). Igen időigényes és költséges lenne egy már meglévő, nagy számú komoly táblaszerkezetet EAV struktúrába átültetni.

 

140 válaszok
  1. Blofock says:

    Of course, there are free play options available, however, once you as a pending player deposits in the casino wallet system, you can start playing for real money immediately.
    online real casino There are different types of casino bonuses, we will look to start with the welcome offer that is considered by many players as the best and most sought after casino bonus.

  2. imparge says:

    You will be able to read each part when it is ready and to guide your writer if there was a misunderstanding about your instructions or some other discrepancies.
    buy papers online When you go to college, you face a number of drastic changes in your everyday life, and it usually takes a lot of mental effort to handle them properly.

  3. Amoupt says:

    E-check is a payment method where you use your bank account as your payment method, and the payment is not received by the recipient until the transaction is processed from the bank. paper writing service We never forget the clients who are buying our papers, and we take great pains to make sure that every final draft will completely and thoroughly meet your needs.

  4. accoks says:

    Paper is a superior writing service, which has got a reputation of a reliable company that provides students from all over the world with quality writing services. custom paper Thesis paper help, help writing a research paper thesis, buy pre written research paper online, pay someone to do my paper, write my college paper for me, buy.

  5. SicJaive says:

    Best man and machine essay pdf rogerian argument example essays perks of being a wallflower compare and contrast book and movie essay essay on hard work is the mother of good luck. paper writer After filling out the order details such as a number of pages, complexity level, and format, you will get to pick a qualified writer to work on your paper.

  6. Greexpek says:

    There are a crafting university papers few items to seem for at the time you get out to acquire comforters and beddings as they are after in a life time kind of financial commitment. custom paper I thought of as the phi coefficient, biserial correlation, correlation ratio eta, partial correlation, structural equation modeling is a literature review, but in which the center of a brief overview of the objectives of the.

  7. enginge says:

    Please note that the information on the different scholarship options was taken from the respective institutional websites. thunkzine While at boarding school, his parents and brother come for a visit, only to be killed in an accident on their way hom.

  8. sweenKix says:

    Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object. wincustomerswebsites Silicone treated valves are often used on top-end footballs for smooth insertion of the metal inflating needle and further protection from loss of air.

  9. noncony says:

    We will generally seek only to access that data which is necessary in accordance with the privileges you have granted to the system. institutosomosiguais.com At the same time the characterization of a particularly simple hostel with just one star is already enclosed.

  10. stelia says:

    And the magnet key was inactive for two days and the only way for us to get to the room is with one of the hotels staff to open it for us. gatesofinannaranch Then it escalates to him wanting me to read one about infidelity and it shuts me down g spot vibrator.

  11. choolf says:

    G, they strive to create a new sensibility toward reading as a form of embodied language and a collective practice. thunkzine Wahrsager kostenlos im internet beilegung wahrsager kostenlos im internet des misstrauen untermauert wurden erstach ihn benutzt.

  12. Boidows says:

    In the pan or wok you prepare your main dish, while the side dish sizzles beautifully in the deep fryer. gmp course online Gehirns quasi abgeschaltet, so dass ich mich immer gewundert habe warum ich nicht abnehme, obwohl ich kaum was esse.

  13. imparge says:

    The Worship Tech Director website named the CHAUVET Professional Ovation E-930VW a 2018 New Products Award Winner at the WFX Show in Orlando. buy cialis Pullman renames various common objects or ideas of our world with archaic terms or new words of his own. Below are some of these renamings and new words.

  14. Jamee Mega says:

    I simply want to tell you that I am new to blogs and honestly loved you’re web-site. Probably I’m planning to bookmark your blog . You certainly come with outstanding articles and reviews. Thanks a bunch for sharing your website page.

  15. viagra says:

    There is noticeably a bundle to understand about this. I assume you ensured great points in features also.

  16. screen security says:

    Greetings from Idaho! I’m bored at work so I decided to browse your site on my iphone during lunch break. I love the information you present here and can’t wait to take a look when I get home. I’m surprised at how quick your blog loaded on my cell phone .. I’m not even using WIFI, just 3G .. Anyhow, good blog!

  17. cbd tincture in virginia on sale says:

    Youre so awesome! I do not suppose Ive check out anything similar to this prior to. So great to find someone with some original thoughts on this subject. realy thanks for starting this up. this website is something that is needed online, someone with a little creativity. beneficial work for bringing something new to the net!

  18. cbd tincture for dog anxiety says:

    Oh my benefits! an amazing post guy. Thanks However I am experiencing issue with ur rss. Don?t know why Not able to subscribe to it. Is there anyone getting similar rss issue? Anybody who knows kindly respond. Thnkx

  19. cbd dog treats blue moon hemp says:

    When I initially commented I clicked the -Inform me when brand-new comments are added- checkbox and also currently each time a comment is included I obtain four e-mails with the very same remark. Is there any way you can remove me from that solution? Many thanks!

  20. does cbd oil have any benefits says:

    Oh my goodness! an incredible write-up dude. Thanks However I am experiencing issue with ur rss. Don?t understand why Not able to register for it. Exists anyone getting similar rss trouble? Anybody who recognizes kindly respond. Thnkx

  21. fitness tips says:

    I do believe all of the ideas you’ve presented in your post.

    They’re very convincing and will definitely work. Still, the posts are too short for newbies.
    May you please extend them a bit from subsequent time?
    Thanks for the post.

  22. bonuses says:

    I am frequently to blogging as well as i actually value your web content. The post has truly peaks my rate of interest. I am going to bookmark your website as well as maintain looking for brand-new info.

  23. go says:

    Wonderful article. I find out something more tough on various blog sites daily. It will constantly be stimulating to check out material from other authors and exercise a little something from their shop. I?d prefer to utilize some with the material on my blog whether you don?t mind. Natually I?ll give you a web link on your web blog site. Many thanks for sharing.

  24. Read Full Article says:

    An outstanding share, I simply given this onto an associate that was doing a little analysis on this. As well as he actually got me breakfast because I located it for him. smile. So let me reword that: Thnx for the reward! But yeah Thnkx for investing the moment to discuss this, I really feel highly about it and enjoy reading more on this topic. If possible, as you become proficiency, would certainly you mind updating your blog site with even more details? It is very useful for me. Large thumb up for this blog post!

  25. browse around this website says:

    The next time I check out a blog, I wish that it does not dissatisfy me as much as this set. I suggest, I recognize it was my choice to review, however I in fact believed youd have something fascinating to state. All I hear is a bunch of grumbling about something that you can fix if you werent also busy searching for interest.

  26. go right here says:

    Nice blog post. I learn something extra challenging on various blogs daily. It will constantly be boosting to review material from other authors and practice a little something from their shop. I?d favor to use some with the material on my blog whether you don?t mind. Natually I?ll offer you a link on your web blog site. Many thanks for sharing.

  27. use this link says:

    I found your blog website on google and also check a few of your very early posts. Continue to keep up the very good operate. I simply extra up your RSS feed to my MSN Information Viewers. Looking for ahead to finding out more from you later on!?

  28. Google says:

    You ought to be a part of a contest for one of the greatest blogs on the net. I am going to highly recommend this website!

  29. download s128 apk says:

    Excellent web site you have got here.. It’s difficult to find quality writing like yours nowadays. I truly appreciate individuals like you! Take care!!

  30. situs judi slot online terbaik says:

    Hello there! This post could not be written any better! Looking through this post reminds me of my previous roommate! He constantly kept preaching about this. I am going to send this article to him. Fairly certain he will have a good read. I appreciate you for sharing!

  31. togel sidney says:

    That is a good tip particularly to those new to the blogosphere. Short but very precise information… Thank you for sharing this one. A must read post!

  32. togel singapore says:

    Excellent web site you have got here.. It’s hard to find quality writing like yours nowadays. I honestly appreciate people like you! Take care!!

  33. togel hk says:

    A fascinating discussion is worth comment. I do think that you need to write more on this issue, it may not be a taboo subject but usually folks don’t speak about these issues. To the next! All the best!!

  34. totobet hongkong says:

    When I initially commented I seem to have clicked the -Notify me when new comments are added- checkbox and now every time a comment is added I recieve 4 emails with the same comment. Is there a way you are able to remove me from that service? Thanks!

  35. keluaran sidney says:

    This is the perfect blog for anybody who hopes to find out about this topic. You realize a whole lot its almost tough to argue with you (not that I personally will need to…HaHa). You certainly put a brand new spin on a subject which has been written about for many years. Great stuff, just excellent!

  36. togel singapore says:

    Right here is the right webpage for anyone who wishes to understand this topic. You realize a whole lot its almost tough to argue with you (not that I actually will need to…HaHa). You certainly put a fresh spin on a topic that’s been written about for decades. Excellent stuff, just wonderful!

  37. result sidney says:

    After I initially left a comment I seem to have clicked on the -Notify me when new comments are added- checkbox and from now on whenever a comment is added I recieve 4 emails with the exact same comment. Perhaps there is a way you are able to remove me from that service? Thank you!

  38. fisco tax consultant says:

    This is the right site for everyone who would like to find out about this topic. You realize so much its almost hard to argue with you (not that I personally will need to…HaHa). You certainly put a brand new spin on a subject that has been written about for decades. Great stuff, just wonderful!

  39. toto hk says:

    I’m more than happy to uncover this great site. I need to to thank you for your time just for this wonderful read!! I definitely appreciated every bit of it and i also have you book-marked to check out new stuff on your blog.

  40. pengeluaran togel says:

    A motivating discussion is definitely worth comment. I do think that you need to publish more on this issue, it might not be a taboo matter but usually people don’t speak about such issues. To the next! Kind regards!!

  41. judi online says:

    It’s nearly impossible to find experienced people on this topic, but you seem like you know what you’re talking about! Thanks

  42. situs bandarq indonesia says:

    After looking over a few of the blog articles on your web page, I honestly appreciate your technique of blogging. I book marked it to my bookmark webpage list and will be checking back soon. Take a look at my website as well and tell me what you think.

  43. snaptekno says:

    Hello there! This article could not be written much better! Reading through this post reminds me of my previous roommate! He always kept talking about this. I will send this post to him. Pretty sure he will have a great read. Many thanks for sharing!

  44. the original source says:

    I?d need to check with you below. Which is not something I normally do! I appreciate checking out a post that will certainly make individuals think. Also, many thanks for permitting me to comment!

  45. www.cargomedan.com says:

    I’d like to thank you for the efforts you’ve put in penning this website. I really hope to view the same high-grade content by you in the future as well. In fact, your creative writing abilities has inspired me to get my very own site now ;)

  46. www.tapanulilogistic.com says:

    After looking at a few of the blog posts on your web site, I seriously like your technique of writing a blog. I added it to my bookmark webpage list and will be checking back in the near future. Please check out my web site as well and let me know how you feel.

  47. axioobet says:

    Oh my goodness! Awesome article dude! Thank you so much, However I am experiencing difficulties with your RSS. I don’t understand why I cannot join it. Is there anybody else getting identical RSS problems? Anybody who knows the answer will you kindly respond? Thanx!!

  48. berjuang says:

    It’s difficult to find well-informed people in this particular subject, however, you sound like you know what you’re talking about! Thanks

  49. 66.42.58.199 says:

    Your style is very unique compared to other people I’ve read stuff from. Many thanks for posting when you have the opportunity, Guess I’ll just bookmark this site.

  50. situs judi online terbaik says:

    An impressive share! I have just forwarded this onto a coworker who had been conducting a little research on this. And he actually ordered me lunch due to the fact that I stumbled upon it for him… lol. So let me reword this…. Thanks for the meal!! But yeah, thanx for spending some time to discuss this subject here on your site.

  51. poker online says:

    Howdy, There’s no doubt that your blog might be having internet browser compatibility problems. When I take a look at your website in Safari, it looks fine however, if opening in Internet Explorer, it has some overlapping issues. I simply wanted to provide you with a quick heads up! Other than that, excellent website!

  52. download s128 apk says:

    Your style is very unique in comparison to other folks I’ve read stuff from. Thank you for posting when you’ve got the opportunity, Guess I will just bookmark this blog.

  53. sabung ayam says:

    Aw, this was an exceptionally nice post. Finding the time and actual effort to generate a good article… but what can I say… I put things off a lot and never seem to get nearly anything done.

  54. http://45.32.122.222/ says:

    Hi there, I do believe your website could be having web browser compatibility issues. When I look at your website in Safari, it looks fine however when opening in I.E., it’s got some overlapping issues. I simply wanted to provide you with a quick heads up! Aside from that, fantastic blog!

  55. download s128 apk says:

    I blog frequently and I really thank you for your content. Your article has truly peaked my interest. I’m going to take a note of your blog and keep checking for new information about once a week. I opted in for your RSS feed too.

  56. Cara Mengatasi Pembatasan Google Adsense says:

    Hi there! This article could not be written much better! Going through this post reminds me of my previous roommate! He constantly kept preaching about this. I will forward this information to him. Fairly certain he’ll have a great read. Thank you for sharing!

  57. poker224 says:

    Howdy! This post couldn’t be written much better! Going through this article reminds me of my previous roommate! He constantly kept talking about this. I will send this post to him. Pretty sure he will have a good read. I appreciate you for sharing!

  58. Buku Referensi says:

    Spot on with this write-up, I actually believe this web site needs much more attention. I’ll probably be back again to see more, thanks for the information!

  59. jasa desain company profile says:

    I was very happy to discover this web site. I want to to thank you for your time just for this fantastic read!! I definitely really liked every part of it and i also have you book-marked to check out new things in your blog.

  60. this hyperlink says:

    An intriguing conversation is worth remark. I assume that you ought to compose much more on this subject, it might not be a frowned on subject yet usually individuals are inadequate to speak on such topics. To the next. Cheers

  61. aplikasi s128 says:

    I blog frequently and I truly appreciate your information. The article has truly peaked my interest. I’m going to take a note of your blog and keep checking for new information about once a week. I opted in for your RSS feed as well.

  62. s128.apk says:

    You ought to take part in a contest for one of the greatest blogs on the web. I’m going to highly recommend this site!

  63. BandarQ says:

    Howdy! This blog post could not be written much better! Going through this article reminds me of my previous roommate! He always kept preaching about this. I am going to send this article to him. Pretty sure he’s going to have a good read. Many thanks for sharing!

  64. download apk s128 says:

    An intriguing discussion is definitely worth comment. I do think that you should publish more on this issue, it may not be a taboo matter but usually people don’t speak about these subjects. To the next! All the best!!

  65. link alternatif s128 says:

    An outstanding share! I have just forwarded this onto a friend who had been conducting a little research on this. And he in fact bought me dinner simply because I stumbled upon it for him… lol. So let me reword this…. Thanks for the meal!! But yeah, thanks for spending time to discuss this matter here on your internet site.

  66. Texas Hold'em Poker Online says:

    After looking over a number of the blog articles on your web site, I really like your technique of writing a blog. I saved as a favorite it to my bookmark website list and will be checking back in the near future. Please visit my web site too and tell me what you think.

  67. s1288 download says:

    That is a good tip particularly to those fresh to the blogosphere. Brief but very precise information… Thanks for sharing this one. A must read post!

  68. Capsa Susun says:

    Good post. I learn something new and challenging on websites I stumbleupon on a daily basis. It’s always exciting to read through articles from other authors and practice a little something from other sites.

  69. vivoslot android says:

    I’m extremely pleased to uncover this web site. I wanted to thank you for your time for this particularly fantastic read!! I definitely savored every little bit of it and I have you book-marked to check out new stuff on your website.

  70. joker123 apk says:

    Greetings! Very helpful advice within this post! It’s the little changes that make the largest changes. Many thanks for sharing!

  71. sbobet bola online says:

    I would like to thank you for the efforts you’ve put in writing this blog. I really hope to see the same high-grade content by you in the future as well. In fact, your creative writing abilities has motivated me to get my own, personal website now ;)

  72. sbobet bola says:

    Your style is really unique in comparison to other folks I’ve read stuff from. Thank you for posting when you’ve got the opportunity, Guess I will just book mark this page.

  73. judi sbobet bola says:

    Spot on with this write-up, I seriously think this web site needs a lot more attention. I’ll probably be back again to see more, thanks for the advice!

  74. sbobet says:

    A fascinating discussion is definitely worth comment. There’s no doubt that that you ought to write more on this issue, it may not be a taboo matter but usually folks don’t discuss such issues. To the next! Many thanks!!

  75. sbobet88 login says:

    I was pretty pleased to uncover this web site. I want to to thank you for ones time for this particularly wonderful read!! I definitely really liked every bit of it and I have you saved to fav to look at new things on your website.

Trackbacks & Pingbacks

  1. viagra mail order

    Magento (1.9) EAV a gyakorlatban (frontend) – aionhill.com

  2. cialis 20mg szerint:

    cialis 20mg

    Magento (1.9) EAV a gyakorlatban (frontend) – aionhill.com

  3. sildenacil for sale

    Magento (1.9) EAV a gyakorlatban (frontend) – aionhill.com

Hagyjon egy választ

Want to join the discussion?
Feel free to contribute!

Vélemény, hozzászólás?

Az email címet nem tesszük közzé.