Posting in the Magento forums has been disabled pending the implementation of a new and improved forum solution which should better serve the community.

For new questions please post at magento.stackexchange.com, the community-run support site for the Magento community. We will be providing updates on the new forum solution soon. For questions or concerns please email community@magento.com.

Magento Forum

Малко помощ за Магенто 1,7
 
luboslav
Jr. Member
 
Total Posts:  10
Joined:  2012-09-28
 

Здравейте, ще се радвам, ако някой помогне по един мой въпрос с Магенто:
Добавих 6 нови полета в администрацията Sales, Order полета, като: Order Total, Tracking Number, Product, State, Shipping Address, Billing Address. Добавих ги в файла Grid.php, та въпросът е вече ги има като полета, но не работят като се прави поръчка. Не извеждат на екрана коректните данни, както другите полета.
Ако някой е правил това ще се радвам да помогне. Прикачено ще сложа и снимка.

Благодаря предварително.

Image Attachments
sales_order.jpgsales_order.jpg
 
Magento Community Magento Community
Magento Community
Magento Community
 
Milen Petrov
Moderator
 
Total Posts:  13
Joined:  2010-11-12
 

Здравейте, по начина по който го правите няма начин да стане.
1) Sales-> Orders не използва sales_order или sales_flat_order таблицата, а sales_flat_order_grid, която има коренно различна структура и всички тези нови полета липсват в нея.
2) Tracking Number полето не съществува като такова. Всеки ордер в Magento винаги използва колекция от shipments, а всеки shipment може да има своя собствена колекция от tracking номера. Така че този подход е грешен и ще трябва да си създадете собствена логика за това поле.
3) Product - тук отново стои същия проблем - всеки ордер има колекция от продукти (order items).
Във вашия случай дори и да имате за всеки ордер по само един продукт и tracking number, това винаги ще гърми, защото нямате колекциите.
4) Shipping Address също не е единствено поле за даден ордер, тъй като в случай че използвате multi-shipping за всеки продукт от ордера имате отделен адрес.
Добавянето на нови полета/колони директно в grid.php е тотално грешен подход, също както и extend/overwrite на класа Mage_Adminhtml_Block_Sales_Order_Grid.
Вместо това трябва да се насочите към съответните events и да си добавите собствен observer, в който да си имплементирате логиката.

Успех

 
Magento Community Magento Community
Magento Community
Magento Community
 
luboslav
Jr. Member
 
Total Posts:  10
Joined:  2012-09-28
 

Благодаря ти! Не че съм сигурен още как да го направя, но мерси за бързия отговор.

 
Magento Community Magento Community
Magento Community
Magento Community
 
Milen Petrov
Moderator
 
Total Posts:  13
Joined:  2010-11-12
 

Този блог пост може да бъде добър старт как да се направят някои от нещата: http://www.excellencemagentoblog.com/magento-sales-order-grid.
Аз обаче не съм фен на този подход, тъй като ако имаме други модули които също extend-ват Sales_Order_Grid и ще стане голяма боза.
Вместо това може да се използва observer върху sales_order_grid_collection_load_before и от там а се вкара custom логиката.
аз лично extend-вам core класове на Magento само в много краен случай, когато не мога да намеря подходящото място къде да се закача.

 
Magento Community Magento Community
Magento Community
Magento Community
 
luboslav
Jr. Member
 
Total Posts:  10
Joined:  2012-09-28
 

Много мерси, ще се позанимавам. Дано се получи.

 
Magento Community Magento Community
Magento Community
Magento Community
 
luboslav
Jr. Member
 
Total Posts:  10
Joined:  2012-09-28
 

Така smile поиграх си с въпросните полета и нали PHP не ми е силата, но смятам че схванах логиката и добавих всички полета.
От тях работят коректно само две Order Total and Mobile. Другите не!
Прикачено ще закача файла и ще се радвам някой да помогне, даже ще компенсирам.

File Attachments
Grid.php  (File Size: 10KB - Downloads: 47)
 
Magento Community Magento Community
Magento Community
Magento Community
 
Milen Petrov
Moderator
 
Total Posts:  13
Joined:  2010-11-12
 

ОК, имаш ли някакъв твой extension или директно пипаш в core? Ако имаш модул ще ти дам малък code-snippet който да ползваш за tracking номера. От него ще можеш да се ориентираш кво да правиш с останалите. Но все пак това е кофти, щото ако имаш друг модул който пипа там ще има проблеми.

Ð’ grid.php:

$this->addColumn('tracking_number', array(
            
'header' => Mage::helper('sales')->__('Tracking Number'),
            
'align' => 'left',
            
'index' => 'tracking_number',
            
'filter' => false,
            
'sortable' => false,
            
'renderer' => new Namespace_Modulename_Block_Adminhtml_Sales_Order_Renderer_TrackingNumber(),
        ));

След това в модула си правиш:

class Namespace_Modulename_Block_Adminhtml_Sales_Order_Renderer_TrackingNumber extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{
    
public function render(Varien_Object $row)
    
{
        $shipmentCollection 
Mage::getResourceModel('sales/order_shipment_collection')
            ->
setOrderFilter($row)
            ->
load();

        
$trackingNumbers = array();
        
        foreach (
$shipmentCollection as $shipment)
        
{
            
foreach ($shipment->getAllTracks() as $track)
            
{
                $trackingNumbers[] 
$track->getTrackNumber();
            
}
        }
        
        
return implode(', '$trackingNumbers);
    
}
}
Надявам си да си наясно с класовете и factory-то, за да можеш да се ориентираш къде трябва да направиш последното. От това повече - здраве му кажи smile
И все пак аз не съм фен на този начин за реализация.
 
Magento Community Magento Community
Magento Community
Magento Community
 
luboslav
Jr. Member
 
Total Posts:  10
Joined:  2012-09-28
 

Благодаря ти много smile
А кой е най правилния начин, както споменах Magento не го знам перфектно.

 
Magento Community Magento Community
Magento Community
Magento Community
 
Milen Petrov
Moderator
 
Total Posts:  13
Joined:  2010-11-12
 

Ами принципно не е добре да се overwrite-ват неща особено в админа. Причините са следните:
1) като презапишеш някой клас или файл се прецакваш от към бъдещи upgrades на версията на Magento. Ако трябва да правиш update, ще трябва да пазиш пълен log на това което си променил или презаписал и после да сравняваш дали съответния метод се поддържа в навата версия или не е коренно променен. А това се превръща в кошмар ако си инсталирал 5-10 и повече твои неща.
2) Ако инсталираш third-party модули и някой от тях пипа по същите класове, тогава ще имаш отново проблеми и ще трябва да променяш и техния код. Все пак Magento зарежда модулите по определен ред и трябва да откриеш в крайна сметка кой точно се ползва. Отново кошмар, да не говорим е има доста сериозни модули, които са IonCube encoded и там нямаш достъп до source.
3) .... има и още ама сега в бързината не мога да се сетя.
Затова винаги когато е възможно Magento трябва да се разширява като се позлва event-observer. Това обаче означава че трябва много добре да познаваш всички events и кога/как се ползват. Само когато не можеш да намериш подходящ event, тогава може да прибегнеш до class-override. А копие на core файл в папката local е просто безумие. Или трябва да е някакъв супер голям bug на Magento или може да го правиш само в dev среда за да тестваш нещо и да се учиш. Иначе просто забрави…
Така сега на въпроса как да стане… Порових се в нашите модули и накратко нещата стоят така специално за Sales-Orders.
1) Както вече писах се ползва таблицата sales_orders_grid за перформанс. Това означава че си пишем модул и добавяме нови полета в нея, каквито ни трябват през setup/upgrade script както и за начина по който те ще се попълват. За някои неща става много лесно, за други е доста по-трудно, но такъв е живота.
2) За да не пипаме в Grid.php ще ни трябва observer който да добави новата ни колона. Кое е event-a обаче… Има такъв - sales_order_resource_init_virtual_grid_columns. Гадно, а? Ð’ този observer си добавяме новата колона като виртуална и накрая
3) Слагаме си и layout update - дефинираме си собствен handle и след това го добавяме:

<adminhtml_sales_order_grid>
        <!-- 
apply the layout handle defined above -->
        <
update handle=\"my_custom_handle\" />
    </
adminhtml_sales_order_grid>
    <!-- 
order grid view action -->
    <
adminhtml_sales_order_index>
        <!-- 
apply the layout handle defined above -->
        <
update handle=\"my_custom_handle\" />
    </
adminhtml_sales_order_index>

И това е! Клиента е доволен, а шефа (ако има такъв) пита що толкоз време сме го правли като е можело да хакнем core и да го направим за 10 мин.
Надявам се че в общи линии съм те насочил. Останалото е сериозно ровене и дълга практика.
Успех

 
Magento Community Magento Community
Magento Community
Magento Community
 
luboslav
Jr. Member
 
Total Posts:  10
Joined:  2012-09-28
 

Супер си smile
Има доста неща, които не са ми ясни с Magento, но както сам казваш си трябва практика.
Ще е хубаво повечко хора като теб да пишат по форумите на подобни въпроси.

Благодаря ти!

 
Magento Community Magento Community
Magento Community
Magento Community
 
Milen Petrov
Moderator
 
Total Posts:  13
Joined:  2010-11-12
 

Няма проблем. Когато имам възможност ще отговарям на въпроси и проблеми, с които съм се сблъсквал както аз, така и колегите с които работя. Много е лесно да се наречеш Magento програмист/интегратор, но малко хора са наистина такива и разбират за какво иде реч и как наистина трябва да се правят нещата. Искрено се надявам скоро да има повече разбиращи тук и да го развием този форум, така че всеки който търси да намери отговор на своя въпрос да може да се обърне за съвет.

П.С. Скоро този форум ще бъде изчистен от спама и ще можем спокойно да си комуникираме. Така, че всеки който има конкретен Magento въпрос е добре дошъл тук.

 
Magento Community Magento Community
Magento Community
Magento Community
 
luboslav
Jr. Member
 
Total Posts:  10
Joined:  2012-09-28
 

Това е страхотно smile А аз продължавам с въпросите за Magento и с надеждата да развивам тази тема.
Та ще се радвам да обсъдим следното: Искам да персонализирам sitemap и robots.txt на Magento сайта. Идеята ми е за по-добро SEO.
Някакви съвети и идеи?

 
Magento Community Magento Community
Magento Community
Magento Community
 
Milen Petrov
Moderator
 
Total Posts:  13
Joined:  2010-11-12
 

SEO-то не ми е най-голямата сила, но все пак поназнайвам по нещо от тук от там. Имаме си човек, който се занимава само с това. Все пак от Magento гледна точка за всеки проект аз използвам следния robots.txt

# Website Sitemap
Sitemaphttp://www.example.com/sitemap.xml
 
# Crawlers Setup
User-agent: *
Crawl-delay10
 
# Allowable Index
# Mind that Allow is not an official standard
Allow/*?p=
Allow: /index.php/blog/
Allow: /catalog/seo_sitemap/category/
# Allow: /catalogsearch/result/
Allow: /media/catalog/
 
# Directories
Disallow: /404/
Disallow: /app/
Disallow: /cgi-bin/
Disallow: /downloader/
Disallow: /errors/
Disallow: /includes/
Disallow: /js/
Disallow: /lib/
Disallow: /magento/
 
# Disallow: /media/
Disallow: /media/captcha/
# Disallow: /media/catalog/
Disallow: /media/css/
Disallow: /media/css_secure/
Disallow: /media/customer/
Disallow: /media/dhl/
Disallow: /media/downloadable/
Disallow: /media/import/
Disallow: /media/js/
Disallow: /media/pdf/
Disallow: /media/sales/
Disallow: /media/tmp/
Disallow: /media/wysiwyg/
Disallow: /media/xmlconnect/
Disallow: /pkginfo/
Disallow: /report/
Disallow: /scripts/
Disallow: /shell/
Disallow: /skin/
Disallow: /stats/
Disallow: /var/
 
# Paths (clean URLs)
Disallow: /index.php/
Disallow: /catalog/product_compare/
Disallow: /catalog/category/view/
Disallow: /catalog/product/view/
Disallow: /catalog/product/gallery/
Disallow: /catalogsearch/
Disallow: /checkout/
Disallow: /control/
Disallow: /contacts/
Disallow: /customer/
Disallow: /customize/
Disallow: /newsletter/
Disallow: /poll/
Disallow: /review/
Disallow: /sendfriend/
Disallow: /tag/
Disallow: /wishlist/
 
# Files
Disallow: /cron.php
Disallow: /cron.sh
Disallow: /error_log
Disallow: /install.php #must be deleted after the install!
Disallow: /LICENSE.html #why this should stay on the server?
Disallow: /LICENSE.txt # why this should stay on the server?
Disallow: /LICENSE_AFL.txt # why this should stay on the server?
Disallow: /STATUS.txt # why this should stay on the server?
Disallow: /get.php # Magento 1.5+
 
# Paths (no clean URLs)
Disallow: /*.js$
Disallow: /*.css$
Disallow: /*.php$
Disallow: /*?SID=
Disallow: /rss*
Disallow: /*PHPSESSID

Тъй като Magento идва без него, това е една от първите ми задачи след като започна нов проект. В зависимост от конкретния сайт и folder структурата променям и съдържанието на този файл, както на мен ми е необходмио.
Знам че има някакви extension-и за управление през backenda ама аз си предпочитам да си го пипам през FTP.
Другото нещо е, е ако го променяш често ще се наложи да накараш Google да го реиндексира. Това става с с два прости реда в .htaccess:
<filesmatch "\.(txt)$"="">
Header set Cache-Control "max-age=60, public, must-revalidate"
След като видиш че вее е реиндексиран може да вдигнеш max-age или просто да ги коментираш до следващата промяна.
Това е за robots. Аз със sitemap не се занимавам, но имаше някакви extensions. При нас sitemap-a се прави от SEO-то и знам че ползват някакви tools, но идея си нямам какви са. Това е от мен по този въпрос smile
 
Magento Community Magento Community
Magento Community
Magento Community
 
luboslav
Jr. Member
 
Total Posts:  10
Joined:  2012-09-28
 

Благодаря ти за бързата реакция. Ще ползвам този robots.txt с малки корекции.
А за sitemap засега ще инсалирам един free плъгин, който добавя сам категории и т.н.

 
Magento Community Magento Community
Magento Community
Magento Community
 
luboslav
Jr. Member
 
Total Posts:  10
Joined:  2012-09-28
 

Здравей, Petrov можеш ли да ми пишеш на личния мейл?
Искам да те питам нещо отностно това което коментирахме в форума.
lyubomir.vezirov@gmail.com

 
Magento Community Magento Community
Magento Community
Magento Community
Magento Community
Magento Community
Back to top