ããã«ã¡ã¯ãHabrïŒ é·ãéãªãªãŒã¹ãããMagento 2ã«ãããããããMagentoã®æåã®ããŒãžã§ã³ã¯ããã¹ãŠã®çãç©ãããæŽ»æ°ãããããŸã ç§ãã¡ãå»ãã€ããã¯ãããŸããã MagentoããŒã ã¯ãããŒãžã§ã³2ã®ãªãªãŒã¹æ¥ãã3幎éã補åã®æåã®ããŒãžã§ã³ããµããŒãããŸãã 2018幎11æé ãŸã§ãMagento1.xããŒãžã§ã³çšã«ç ãæŸãŸãããããŒããã¢ãžã¥ãŒã«ããµãŒãã¹ã®å¹
åºãéžæè¢ãåžå Žã«æº¢ããŠããŸãã ãããŠãçŸåšMagento 1.xã«ããå€ãã®ãµã€ãã¯ãæ¥ãã§æŽæ°ããå¿
èŠã¯ãããŸããã å€ãã®äœæ¥-å°ãã®ææ°ã ãã®ãããMagentoã®æåã®ããŒãžã§ã³ã®éçºã¯äŸç¶ãšããŠé¢é£ããŠãããæ°å¹Žã¯ãããªããŸãã
ãã ãããã®èšäºã§ã¯é»ååååŒãœãªã¥ãŒã·ã§ã³ã®éçºã®èŠéãã«ã€ããŠã¯èª¬æããŸããã ãããããMagento 1.xïŒä»¥éãåã«MagentoïŒã®ã¢ãžã¥ãŒã«ãäœæããããã®ã¬ã€ãããŸãšããããšã«ããŸããã ããããããã¯åã«æç€ºã«åŸãã ãã®ç°¡åãªã¬ã€ãã§ã¯ãªããããªããã®ããã«æžããä»ã®æ¹æ³ã§ã¯æžããªãã®ãããšããããã€ãã®èª¬æããããŸãã ç§ã¯ç°¡æœããšååæ§ã®éã®äžéç¹ãèŠã€ããããšããŸããã ãããŠäœãããããã®ã¬ã€ãã¯Magentoã®ã¢ãžã¥ãŒã«éçºã®åå¿è
ã«ãšã£ãŠæçšã§ãã ããããçµéšè±å¯ãªãŠãŒã¶ãŒã«ãšã£ãŠã¯ããã®è³æã¯æçã§ãã
å®éãç§ã¯åéšåãèªçµŠèªè¶³ãããããšããŸããã äžç¬ã ãã«èå³ããããªããã¬ã€ãå
šäœãèµ°ãåãã®ã§ã¯ãªããç¹å®ã®ã»ã¯ã·ã§ã³ããå¿
èŠãªæ
å ±ããã¹ãŠååŸã§ããŸãã ãŸããã»ã¯ã·ã§ã³ã®äžéšã®ã»ã¯ã·ã§ã³ãæ¢ã«å®è£
ããŠããå Žåã¯ãã¹ãããã§ããŸãã ãããªã«ã€ããŠãåãããšãèšããŸãã ä»äºã«å¿
èŠãªã®ã¯ãããªã¬ãã¹ã³ã ãã§ããããããªããªããŠãå®è¡ã§ããŸããã¢ã¯ã·ã§ã³ã®é åºãšã³ã¡ã³ãä»ãã®ãªã¹ãããããŸãã ããã€ãã®ããšã¯ãããªãèŠãã»ããè¯ãã§ããã ã³ãŒãã£ã³ã°ãšãšãã«ãæäœæ§ã®ãã¢ããŸã ãããŸãã ã¯ããç§ã¯äœããèŠéãå¯èœæ§ããããŸãã ãã®ããããããªã«ã¯ææžåãããŠããªãç¬éããããããããŸããããããã¹ãçã«ã¯ãããªã«ãªã远å ããããããããŸããã ããã¯é¿ããããŸããã§ããããªããªã ãã¹ãŠãç°ãªãæéã«è¡ãããŸããã
æºåãã
ãã¹ãŠã¯ãè·å Žã®æºåããå§ãŸããŸããç§ãã¡ã®å Žåã¯ããã¹ãã¹ãã¢ãã€ã³ã¹ããŒã«ããããµãŒããŒããå§ãŸããŸãã
ç°å¢ã®æºåãã§ããããæ¬¡ã®ã»ã¯ã·ã§ã³ã«é²ãããšãã§ããŸã ã
Ubuntu 16.04 LTSäžã®ãµãŒããŒ
Ubuntu 16.04é
åžããããããŠã³ããŒããããä»®æ³ãã·ã³ããæ§æããŸãã ãããŠãä»®æ³ã³ã³ãã¥ãŒã¿ãŒã«Ubuntuãã€ã³ã¹ããŒã«ããŸãã éåžžãã€ã³ã¹ããŒã«ããã»ã¹ã¯ç°¡åã§ãããããã¥ã¡ã³ãã¯å¿
èŠãããŸããããã€ã³ã¹ããŒã«ãšæ§æã®ããã»ã¹å
šäœã¯ã以äžã®ãããªã«èšèŒãããŠããŸãã
ãããªïŒUBUNTU 16.04ã®ã€ã³ã¹ããŒã«-Nginx + php7-fpm + mysql + samba
å¿
èŠãªãœãããŠã§ã¢ãã€ã³ã¹ããŒã«ããŠæ§æããŸãã
sudo su apt-get install && apt-get upgrade
ãã¡ã€ã«ãããŒãžã£ãŒããšãã£ã¿ãŒãã¿ã¹ã¯ãããŒãžã£ãŒãé
眮ããŸã
apt-get install mc nano htop
IPã¢ãã¬ã¹ãéçã«æ§æããŸãïŒååãšããŠãããã¯çç¥ã§ããŸãããã«ãŒã¿ãŒåŽã§éçã¢ãã¬ã¹ãå²ãåœãŠãŸãïŒã
nano /etc/network/interfaces
èšå®äŸïŒ
iface eth0 inet static address 192.168.0.100 netmask 255.255.255.0 gateway 192.168.0.1 dns-nameservers 192.168.0.1 8.8.8.8 auto eth0
ããã§ã
eth0ã¯ãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ã€ã¹ã§ãã
ifconfigãæžãããšã§ãããèŠãããšãã§ããŸã
NginxãŠã§ããµãŒããŒïŒ
apt-get install nginx
PHP 7.0 FPMïŒ
apt-get install php-fpm php-xdebug php-soap php-gd php-mbstring php-mcrypt php-curl php-xml
MySQL 5.7ããã³phpMyAdminïŒ
apt-get install mysql-server-5.7 phpmyadmin
ã¹ãã¢ãã¡ã€ã«ãæ ŒçŽããããã©ã«ãã®ææè
ãšæš©éã倿ŽããŸãã
chown -R dev:dev /var/www chmod -R 777 /var/www
devïŒdevã¯ãŠãŒã¶ãŒã®ååãšã°ã«ãŒãã§ãã Ubuntuã®ã€ã³ã¹ããŒã«æã«ãã®ååã䜿çšããŸããã
ããã§ãã€ã³ã¹ããŒã«ããããœãããŠã§ã¢ãæ§æããå¿
èŠããããŸãã
Nginx
Nginxã®3ã€ã®æ§æãäœæããŸããïŒåçãã¡ã€ã³ãMagento 2ã®æ§æïŒæçšïŒãphpMyAdminã®æ§æã åçãã¡ã€ã³ã䜿çšããããããconfigã®åäœåçã¯ç°¡åã§ãã
- ã³ã³ãã©ã€ã¢ã³ã¹ãã¡ã€ã³-IPãæ§æããŸãã ãããè¡ãæ¹æ³ã¯éèŠã§ã¯ãããŸãããhostsãã¡ã€ã«ã«æžã蟌ã¿ãŸãã ããšãã°ã magento.dev 192.168.0.100
- Nginxã¯ãªã¯ãšã¹ããåä¿¡ãããšã/ var / www /ïŒãã¡ã€ã³åïŒã®åœ¢åŒã®server_rootãã¹ãäœæããŸãã äŸïŒãã©ãŠã¶magento.dev-server_root /var/www/magento.devã«æžã蟌ã¿ãŸã
- ç§ãã¡ã®ã¹ãã¢ã¯/var/www/magento.devãã©ã«ããŒã«é
眮ããå¿
èŠããããŸã
dynamic.conf server { listen 80; server_name $http_host; root /var/www/$http_host; location / { index index.html index.php; try_files $uri $uri/ @handler; expires 30d; } location /. { return 404; } location @handler { rewrite / /index.php; } location ~ .php/ { rewrite ^(.*.php)/ $1 last; } location ~ .php$ { if (!-e $request_filename) { rewrite / /index.php last; } expires off; fastcgi_pass unix:/run/php/php7.0-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $document_root$fastcgi_script_name; fastcgi_param MAGE_RUN_TYPE store; include fastcgi_params; } }
phpmyadmin.conf server { listen 80; server_name pma myadmin; root /usr/share/phpmyadmin/; index index.php; location /setup/index.php { deny all; } location ~ .php$ { if (!-e $request_filename) { rewrite / /index.php last; } expires off; fastcgi_pass unix:/run/php/php7.0-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $document_root$fastcgi_script_name; fastcgi_param MAGE_RUN_TYPE store; include fastcgi_params; } include fastcgi_params; }
æ§æããã©ã«ããŒ/ etc / nginx / sites-availiable /ã«é
眮ãããã©ã«ããŒ/ etc / nginx / sites-enabled /ã«ã·ã³ããªãã¯ãªã³ã¯ãäœæããŸãã ãŸãã¯ã/ etc / nginx / sites-enabled /ãã©ã«ããŒã«é
眮ããã ãã§ã
PHP 7.0 FPM
/etc/php/7.0/fpm/php.iniãç·šéããŸãã ç§ãã¡ã¯ãååãšããŠãããªãã®å¥œã¿ã«åãããŠã«ã¹ã¿ãã€ãºã§ããããã€ãã®ãã©ã¡ãŒã¿ã®ã¿ãå¿é
ããŠããŸãã
max_execution_time = 300 max_input_time = 160 memory_limit = 512M display_errors = On log_errors = On html_errors = On date.timezone = ( )
SambaãµãŒããŒç§ã¯ãsambaãä»ããŠäœæ¥ãããããã¯ãŒã¯ãã©ã€ããããŠã³ãããéãã«ãã¡ã€ã«ãã³ããŒããã®ã奜ãã§ãã ããããããªãã¯ãããå¿
èŠãšããªããããããŸããã 圌ããèšãããã«ãå³ãšè²ã«ã€ããŠ...ç§ã®èšå®ã¯æ¬¡ã®ãšããã§ãïŒ
smb.conf [global] workgroup = WORKGROUP server string = %h server (Samba, Ubuntu) dns proxy = no log file = /var/log/samba/log.%m max log size = 1000 syslog = 0 panic action = /usr/share/samba/panic-action %d server role = standalone server passdb backend = tdbsam obey pam restrictions = yes unix password sync = yes passwd program = /usr/bin/passwd %u passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . pam password change = yes map to guest = bad user null passwords = Yes guest account = www-data [www] path = /var/www/ comment = WWW folder guest ok = yes browseable = yes read only = no locking = no force user = www-data force group = www-data

ãã¹ãã¹ãã¢ã®ã€ã³ã¹ããŒã«
ã€ã³ã¹ããŒã«ããã»ã¹ã¯ç°¡åã§ãç¹å¥ãªã¹ãã«ã¯å¿
èŠãããŸããã ãã ããããããããããããã«ããã¿ãã¬ã®äžã«ãããªã®æç€ºãé ããŠãããŸãã
ãããªïŒMagento Test Storeã®ã€ã³ã¹ããŒã«
ãã ããéèŠãªç¹ã1ã€ãããŸããMagentoã¯PHP 7ã§ã¯åäœããŸããã
å
¥æããã«ã¯ã次ã®ä¿®æ£ã䜿çšã§ããŸãïŒ
github.com/Inchoo/Inchoo_PHP7ã¢ãžã¥ãŒã«äœæ

æ§é ãšæ§æ
ãããªïŒMagentoã¢ãžã¥ãŒã«ã®æ§é ãšæ§æ
ã¬ãã¹ã³ã§äœæããã
IGN_Siteblocks-1.zipã¢ãžã¥ãŒã«ã®æ§é
ã¹ãã¢ããŒãžïŒããã³ããšã³ãéšåïŒã«ãããã¯ã衚瀺ããã¢ãžã¥ãŒã«ã®äŸã䜿çšããŠãã¢ãžã¥ãŒã«ãäœæããæ¹æ³ãåŠã³ãŸãã ãããŠæåã«ãã¢ãžã¥ãŒã«ã®ååãæãã€ããŸãã ååã¯çããçã«ããªã£ãŠããå¿
èŠããããŸãã ãŸããåå空éïŒéåžžã¯éçºè
ã®äŒç€Ÿã®ååãŸãã¯åœŒã®ååïŒãéžæããå¿
èŠããããŸãã ãããŠãæçµçãªååã¯
Namespace_Modulenameãšãã圢åŒãåããŸãã ãã®äŸã§ã¯ã
IGN_SiteblocksãåŒã³åºã
ãŸãã ã
XMLç»é²ãã¡ã€ã«ãäœæããŸãã
app / etc / modules / IGN_Siteblocks.xml <?xml version="1.0" ?> <config> <modules> <IGN_Siteblocks> <active>true</active> <codePool>local</codePool> </IGN_Siteblocks> </modules> </config>
codePoolã«ã€ããŠè©±ããŸãã ãããã¯3ã€ãããŸãïŒ
local ã
community ã
core ã
ãããŠãã³ã¢ã§ã¯äœã倿Žãããã·ã¹ãã ã®åºæ¬ãã¡ã€ã«ãããããããã倿Žããå¿
èŠãããå Žåã¯ãçŽæ¥ç·šéãã以å€ã®æ¹æ³ããããšããã«å€æããŸãã
ããŒã«ã«ãš
ã³ãã¥ããã£ãå®å
šã«äœ¿çšã§ã
ãŸã ïŒå®éã«ã¯ã
ã³ãã¥ããã£ãããã«äœ¿çšããæ¹ãè¯ãã§ããããã®äŸã§ã¯
ããŒã«ã«ã«ãªããŸãïŒã
ã¹ãã¢ã®ç®¡çããã«ã®[ã·ã¹ãã ]> [æ§æ]> [詳现]> [ã¢ãžã¥ãŒã«åºåã®ç¡å¹å]ã«ç§»åããIGN_Siteblocksã確èªããŸãã
ã¢ãžã¥ãŒã«çšã®ãã©ã«ããŒãäœæããŸãã
ã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/- ããã㯠-ããŒãžã®ã¬ã³ããªã³ã°ãæ
åœãããããã¯ã¯ã©ã¹
- ã³ã³ãããŒã©ãŒ -ã³ã³ãããŒã©ãŒã¯ãªã¯ãšã¹ããåãå
¥ããŸã
- ãªã© -ããããçš®é¡ã®æ§æãã¡ã€ã«ããããŸã
- ãã«ã㌠-远å ã®ãã«ããŒã¯ã©ã¹
- ã¢ãã« -ã¢ãã«
- sql-ã€ã³ã¹ããŒã«ã¹ã¯ãªãã
Magentoã®ã¢ãžã¥ãŒã«ã¯ã
MVCãã¿ãŒã³ãå®è£
ããŸãã ã¢ãã«ããã¥ãŒïŒãããã¯ããã³ãã¬ãŒããã¬ã€ã¢ãŠãïŒããã³ã³ã³ãããŒã©ãŒããããŸãã
etcãã©ã«ããŒã«
config.xmlãäœæã
ãŸãã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ etc / config.xml <?xml version="1.0" ?> <config> <modules> <IGN_Siteblocks> <version>1.0.0</version> </IGN_Siteblocks> </modules> <global> </global> <frontend> </frontend> <admin> </admin> <adminhtml> </adminhtml> <defalut> </defalut> </config>
ããã§ãããã€ãã®ã¢ãžã¥ãŒã«èšå®ã®ãããã¯ãã¢ãã«ãã³ã³ãããŒã©ãŒããã«ããŒããªãã¶ãŒããŒããªãã€ããã¬ã€ã¢ãŠããç¿»èš³ãæšæºå€ã宣èšããŸãã

XDEBUG + PHPSTORMã³ãŒãã®ãããã°
ãããªïŒXDEBUG + PHPSTORMã³ãŒãã®ãããã°
ããã§ãããããªãã¥ãŒããªã¢ã«ãã芧ã«ãªãããšããå§ãããŸãã ãŸãããµãŒããŒãæ§æããŸãã
apt-get install php-xdebug
php.iniãŸãã¯xdebug.iniã®èšå®ãç·šéããŸã
/etc/php/7.0/conf.d/20-xdebug.ini zend_extension = xdebug.so xdebug.idekey = "PHPSTORM" xdebug.remote_autostart = 1 xdebug.remote_connect_back = 1 xdebug.remote_enable = 1 xdebug.remote_port = 9000
ä¿åãã
ãµãŒãã¹php7.0-fpm restart
serviceãåèµ·åããããšãå¿ããªãã§ãã ããã PHPSTORMã§ã¯ãæ°ãããªã¢ãŒããããã°æ§æãäœæããŸãã
é©åãªã¢ãã¬ã¹ãšããŒãã§ãµãŒããŒã远å ããŸãã IDEããŒãã£ãŒã«ãã«ãåèªPHPSTORMãå
¥åããŸãã

ã¢ãã«ãã³ã¬ã¯ã·ã§ã³ã ããŒã¿ããŒã¹ãæäœããŸãã
ãããªïŒã¢ãã«ãã³ã¬ã¯ã·ã§ã³ã MagentoããŒã¿ããŒã¹ã®äœ¿çš
ã¬ãã¹ã³ã§äœæããã
IGN_Siteblocks-2.zipã¢ãžã¥ãŒã«ã®æ§é
ã¢ãã«ã¯ãããŒã¿ããã³ããŒã¿ã®ã¿ãæäœããããã®ã¯ã©ã¹ã§ãã ãã®ããŒã¿ãããŒã¿ããŒã¹ã«ä¿åããæ¹æ³ã«åŸ®åŠãªéãã¯ãããŸããã ãã®ããŒã¿ã®ã¬ã³ããªã³ã°ã«é¢é£ããã³ãŒãã¯ãããŸããã Magentoã§ã¯ããããã¯é¡§å®¢ã補åãæ³šæãªã©ã§ãã
ã¢ãžã¥ãŒã«ã§ã¢ãã«ã䜿çšããã«ã¯ãconfig.xmlãæ§æããå¿
èŠããããŸã
ã¢ãã«ããããã¯ããã«ããŒãã°ããŒãã«ã»ã¯ã·ã§ã³ã«è¿œå ãããããšãæãåºãããŠãã ããã config.xmlã¯æ¬¡ã®åœ¢åŒãåããŸãã
ã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ etc / config.xml <?xml version="1.0" ?> <config> <modules> <IGN_Siteblocks> <version>1.0.0</version> </IGN_Siteblocks> </modules> <global> <models> <siteblocks> <class>IGN_Siteblocks_Model</class> <resourceModel>siteblocks_resource</resourceModel> </siteblocks> <siteblocks_resource> <class>IGN_Siteblocks_Resource</class> <entities> <block> <table>ign_siteblock</table> </block> </entities> </siteblocks_resource> </models> <resources> <siteblocks_setup> <setup> <module>IGN_Siteblocks</module> </setup> </siteblocks_setup> </resources> </global> </config>
ãã¬ãã£ãã¯ã¹ã®ååãæ±ºå®ããããšãéèŠã§ãïŒããã§ã©ã®çšèªãè¯ããããããŸããïŒã ãµã€ããããã¯ãéžæããŸããã ããã¯ä»»æã®ååã§ãããéåžžãåå空éãšã¢ãžã¥ãŒã«ã®ååããŸãã¯ã¢ãžã¥ãŒã«ã®ååã®ã¿ãã圢æãããŸãã ãŸãããŸãã¯éçºè
ãæ··ä¹±ãããããã«ã以åã«åªãããé
åãè²·ã£ãå®å
šã«ä»»æã®è¡ãéžæã§ããŸãã
倧æåãšå°æåãåºå¥ããã«æç¢ºã«éžæããŠãã ããã 誀æ€ã1ã€ãããé·ãéæãé²ãã§åé¡ãæ¢ããŸãã ã¢ãã«ã®ååãšããŒãã«ãžã®ãã€ã³ãã ã¢ãã«åã¯ã¢ãã«ãã¡ã€ã«åãšäžèŽããŸãã ããŒã¿ããŒã¹å
ã®ããŒãã«ã®ååã¯ä»»æã§ãã ç§ã®å Žåãã¢ãã«ã«æ»ãã«ã¯ã次ã®ããã«æžãå¿
èŠããããŸãã
Mage::getModel('siteblocks/block');
ããã§ã¢ãã«ã远å ã§ããŸãã ãããã¯ã¢ãã«ãäœæããŸãã ããŒãã«ã«ã¢ã¿ãããããåã¢ãã«ã«ã€ããŠãã¢ãã«ããªãœãŒã¹ã¢ãã«ãã³ã¬ã¯ã·ã§ã³ã¢ãã«ã®3ã€ã®ãã¡ã€ã«ãäœæããå¿
èŠããããŸãã ãã®ã¢ãã«ã¯ããŒã¿ããŒã¹ã®æäœããæœè±¡åãããŠããŸãããªãœãŒã¹ã¢ãã«ã¯ä»¥äžã«ãããŸãã ããã§ãããŒã¿ãä¿åããåãšããŒã¿ããŒã¹ããããŒãããåŸã«ããã£ã«ã¿ãªã³ã°ããœãŒããããŒã¿åŠçã®ããžãã¯ãå®è£
ããŸãã
Block.phpã¢ãã«ã³ãŒãïŒ
ã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ã¢ãã«/ Block.php <?php class IGN_Siteblocks_Model_Block extends Mage_Core_Model_Abstract { public function _construct() { parent::_construct(); $this->_init('siteblocks/block');
Mage_Core_Model_Abstractããç¶æ¿ãããã¢ãã«ã ãªãœãŒã¹ã¢ãã«ãModel / Resourceãã©ã«ããŒã«ä¿åããŸãã
ã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ã¢ãã«/ãªãœãŒã¹/ Block.php <?php class IGN_Siteblocks_Model_Resource_Block extends Mage_Core_Model_Resource_Db_Abstract { public function _construct() { $this->_init('siteblocks/block','block_id');
ã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ã¢ãã«/ãªãœãŒã¹/ãããã¯/ Collection.php <?php class IGN_Siteblocks_Model_Resource_Block_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract { public function _construct() { parent::_construct(); $this->_init('siteblocks/block'); } }
ã¯ã©ã¹ã¯ç©ºã§ããããã§ã«å¿
èŠãªæå°éã®ç¶æ¿æ©èœãå®è£
ããŠããŸãã
å¿
èŠã«å¿ããŠãããã«ã³ãŒãã远å ããŸãã ããã«ã¢ãã«ã远å ããå Žåã¯ãããŒãã«ã«ãã1ã€ã®ã¢ãã«ãã€ã³ããš3ã€ã®æ°ãããã¡ã€ã«ã远å ããŸãã ããŒãã«ã«é¢é£ä»ããããŠããªãä»»æã®æ°ã®ã¢ãã«ã远å ããŠïŒäœããã®æ©èœãå®è£
ããããã ãã«ïŒãæ°ãããã¡ã€ã«ã远å ããã ãã§ã
Mage_Core_Model_Abstractããç¶æ¿ããå¿
èŠ
ã¯ãããŸããã
ã¢ãã«ã®ããŒãã«ãäœæããã€ã³ã¹ããŒã«ã¹ã¯ãªãããäœæããããšãå¿ããªãã§ãã ããã
app / code / local / IGN / Siteblocks / sql / siteblocks_setup / install-1.0.0.sql <?php $installer = $this; $installer->startSetup(); $table = $installer->getConnection() ->newTable($this->getTable('siteblocks/block')) ->addColumn('block_id',Varien_Db_Ddl_Table::TYPE_INTEGER,null,array( 'identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true )) ->addColumn('title',Varien_Db_Ddl_Table::TYPE_VARCHAR,null,array( 'nullable' => false )) ->addColumn('content',Varien_Db_Ddl_Table::TYPE_TEXT,null,array( 'nullable' => false )) ->addColumn('block_status',Varien_Db_Ddl_Table::TYPE_TINYINT,null,array( 'nullable' => false )) ->addColumn('created_at',Varien_Db_Ddl_Table::TYPE_DATETIME,null,array( 'nullable' => false )); $installer->getConnection()->createTable($table);
éèŠãªç¬éïŒ
ã€ã³ã¹ããŒã«ã¹ã¯ãªããããŸã ãªããšãã«ãã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ãããç¶æ
ã§ç®¡çããã«ã«ç§»åããããšããå Žåã ã»ãšãã©ã®å Žåãã€ã³ã¹ããŒã«ã¹ã¯ãªããã¯äºåºŠãšå®è¡ãããŸããã ãã®å Žåãã¹ãã¢ããŒã¿ããŒã¹ã®core_resourceããŒãã«ããsiteblocks_setupãšã³ããªãèŠã€ããŠåé€ããå¿
èŠããããŸãã
ã¢ãžã¥ãŒã«ããŒãžã§ã³ãã¢ããã°ã¬ãŒãããå Žåã
config.xmlã§æ°ããããŒãžã§ã³ãæå®ã
ãŸã ïŒäŸïŒ
1.0.1ïŒ ã ãããŠãã¢ããã°ã¬ãŒãã¹ã¯ãªãã
upgrade-1.0.0-1.0.1.phpãäœæããŸãã ãããŠããã®åŸã®ã¢ããã°ã¬ãŒããšåã粟ç¥ã§ã
ã¢ãã«ãšã³ã¬ã¯ã·ã§ã³ã«ã€ããŠèšãã°ããããã®ã¯ã©ã¹ã®æãåºæ¬çãªã¡ãœããã«èšåããããšã¯ééããããŸããã

ã³ã³ãããŒã©ãŒãšã«ãŒãã£ã³ã°
ãããªïŒMagentoã®ã³ã³ãããŒã©ãŒãšã«ãŒãã£ã³ã°ã
ã¬ãã¹ã³ã§äœæããã
IGN_Siteblocks-3.zipã¢ãžã¥ãŒã«ã®æ§é
MVCãã¿ãŒã³ã«ãããšãã³ã³ãããŒã©ãŒã¯èŠæ±ã®åŠçãæ
åœããŸãã HTTPãªã¯ãšã¹ãã®åœ¢åŒã§ãããããå
¥åä¿¡å·ãåãåããŸãã ãªã³ã¯ããã©ããŸãã-察å¿ããã³ã³ãããŒã©ãŒãæ©èœããŸããã
ã³ã³ãããŒã©ãŒãäœæããåã«ã
config.xmlã§ã«ãŒãã£ã³ã°ãæ§æã
ãŸã ã ããã³ããšã³ããšç®¡çéšåã®ã«ãŒãã£ã³ã°ã¯åå¥ã«æ§æãããŸãã ããã§ã
ããã³ããšã³ããš
管çã»ã¯ã·ã§ã³ã«ã«ãŒã¿ãŒã远å ããŸãã
config.xmlã®åœ¢åŒã¯æ¬¡ã®ãšããã§ãã
ã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ etc / config.xml <?xml version="1.0" ?> <config> <modules> <IGN_Siteblocks> <version>1.0.0</version> </IGN_Siteblocks> </modules> <global> <models> <siteblocks> <class>IGN_Siteblocks_Model</class> <resourceModel>siteblocks_resource</resourceModel> </siteblocks> <siteblocks_resource> <class>IGN_Siteblocks_Resource</class> <entities> <block> <table>ign_siteblock</table> </block> </entities> </siteblocks_resource> </models> <resources> <siteblocks_setup> <setup> <module>IGN_Siteblocks</module> </setup> </siteblocks_setup> </resources> </global> <frontend> <routers> <siteblocks> <use>standard</use> <args> <module>IGN_Siteblocks</module> <frontName>siteblocks</frontName> </args> </siteblocks> </routers> </frontend> <admin> <routers> <adminhtml> <args> <modules> <siteblocks after="Mage_Adminhtml">IGN_Siteblocks_Adminhtml</siteblocks> </modules> </args> </adminhtml> </routers> </admin> <default> </default> </config>
ããã§ãã¢ãžã¥ãŒã«ã®
controllersãã©ã«ããŒã«ã³ã³ãããŒã©ãŒãäœæã§ããŸãã ããã³ããšã³ãéšåã®ã³ã³ãããŒã©ãŒã¯ã©ã¹ã¯ã
Mage_Core_Controller_Front_Actionã¯ã©ã¹ãç¶æ¿ããå¿
èŠããããŸãã
ãã¹ãã³ã³ãããŒã©ãŒTestController.phpãäœæãã
ã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ã³ã³ãããŒã©ãŒ/ TestController.php <?php class IGN_Siteblocks_TestController extends Mage_Core_Controller_Front_Action { public function mytestAction() { die('test'); } }
ããã§
example.com/siteblocks/test/mytestã®ãããªURLã«ç§»åã
ãŸã ã ããã¹ãããšããçœãç»é¢ã衚瀺ãããŸãã ãããçºçããªãã£ãå Žåãããæ®µéã§ãšã©ãŒãçºçããŸããã
ã³ãŒããå確èªãããã°ãèªãã§ãã ããã URLã¯ã«ãŒã¿ãŒïŒ
ãµã€ãããã㯠ïŒ/ã³ã³ãããŒã©ãŒïŒ
ãã¹ãã³ã³ãããŒã©ãŒïŒ/ã¢ã¯ã·ã§ã³ïŒ
mytestã¢ã¯ã·ã§ã³ïŒã§æ§æãããŸã
GETãã©ã¡ãŒã¿ãŒã¯2ã€ã®æ¹æ³ã§éä¿¡ã§ããŸãã
管çã³ã³ãããŒã©ãŒã¯ãcontrollers / Adminhtmlãã©ã«ããŒã«äœæãããŸãã ããã³ããšã³ãéšåã®ã³ã³ãããŒã©ãŒã¯ã©ã¹ã¯ã
Mage_Adminhtml_Controller_Actionã¯ã©ã¹ãç¶æ¿ããå¿
èŠããããŸãã
ãã¹ãã³ã³ãããŒã©ãŒTestController.phpãäœæããŸãã
ã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ã³ã³ãããŒã©ãŒ/ Adminhtml / TestController.php <?php class IGN_Siteblocks_Adminhtml_TestController extends Mage_Adminhtml_Controller_Action { public function mytestAction() { die('admin'); } }
URLïŒ
example.com/admin/test/mytestããã¢ã¯ã»ã¹ã§ããŸã
-adminã¯ç®¡çããã«ãžã®éã§ãã
ãããŠãããã«ã¯åŸ®åŠãªéãããããŸãããã®ãããªURLã¯ãã§ã«å¥ã®ã¢ãžã¥ãŒã«ã«ãã£ãŠå æãããŠããå¯èœæ§ããããŸãã 2ã€ã®è§£æ±ºçããããŸãïŒã³ã³ãããŒã©ãŒã®ååãç«¶åããªãæ¢ç¥ã®ååïŒIgntestController.phpãªã©ïŒã«å€æŽããããã³ã³ãããŒã©ãŒããµããã©ã«ããŒã«å
¥ããŸãã
ã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ã³ã³ãããŒã©ãŒ/ Adminhtml /ãµã€ããããã¯/TestController.php <?php class IGN_Siteblocks_Adminhtml_Siteblocks_TestController extends Mage_Adminhtml_Controller_Action { public function mytestAction() { die('admin'); } }
URLã¯ã
example.com /
admin /
siteblocks_test /
mytestã®åœ¢åŒãåã
ãŸãã
ãã«ããŒ
ãããªïŒMagentoã®ãã«ããŒ
ã¬ãã¹ã³ã§äœæããã
IGN_Siteblocks-4.zipã¢ãžã¥ãŒã«ã®æ§é
Magentoã®ãã«ããŒã¯ã©ã¹ã¯ã远å ã®ã¯ã©ã¹ãšããŠäœ¿çšãããŸãã ã¢ãã«ããããã¯ãã³ã³ãããŒã©ãŒã®æ©èœã«é©åããªããµãŒãããŒãã£ã®ããžãã¯ãå®è£
ããå¿
èŠããããŸãã ãã ããã¢ãžã¥ãŒã«ã«ã¯å°ãªããšã1ã€ã®Data.phpãã«ããŒã¯ã©ã¹ãå¿
èŠã§ãã
ãã®ãã«ããŒã¯ãããã©ã«ãã§ããã¹ãïŒã©ãã«ãã¡ãã¥ãŒé
ç®ãªã©ïŒããã³ãã®ä»ã®ããžãã¯ã翻蚳ããããã«äœ¿çšãããŸãã
ãã«ããŒã§ã¯ãèšå®ããèšå®ãèªã¿åãããã®ã¡ãœããã宣èšããããšããå§ãããŸãã ãã«ããŒã¯ã
Mage_Core_Helper_Abstractã¯ã©ã¹ãç¶æ¿ããå¿
èŠããããŸãã
ã¢ããª/ã³ãŒã/ loca / IGN / Siteblocks /ãã«ããŒ/ Data.php <?php class IGN_Siteblocks_Helper_Data extends Mage_Core_Helper_Abstract { }
ãã«ããŒå
ã®ããã¹ãã翻蚳ãã__ïŒïŒã¡ãœãããããããã®ã¢ããªã±ãŒã·ã§ã³ã¯æ¬¡ã®ããã«ãªããŸãã
echo Mage::helper('siteblocks')->__('Some text')
config.xmlã§ç¿»èš³ãã¡ã€ã«ã宣èšããŸãã
ã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ etc / config.xml <?xml version="1.0" ?> <config> <modules> <IGN_Siteblocks> <version>1.0.0</version> </IGN_Siteblocks> </modules> <global> <models> <siteblocks> <class>IGN_Siteblocks_Model</class> <resourceModel>siteblocks_resource</resourceModel> </siteblocks> <siteblocks_resource> <class>IGN_Siteblocks_Resource</class> <entities> <block> <table>ign_siteblock</table> </block> </entities> </siteblocks_resource> </models> <resources> <siteblocks_setup> <setup> <module>IGN_Siteblocks</module> </setup> </siteblocks_setup> </resources> <helpers> <siteblocks> <class>IGN_Siteblocks_Helper</class> </siteblocks> </helpers> </global> <frontend> <routers> <siteblocks> <use>standard</use> <args> <module>IGN_Siteblocks</module> <frontName>siteblocks</frontName> </args> </siteblocks> </routers> <translate> <modules> <IGN_Siteblocks> <files> <default>IGN_Siteblocks.csv</default> </files> </IGN_Siteblocks> </modules> </translate> </frontend> <admin> <routers> <adminhtml> <args> <modules> <siteblocks after="Mage_Adminhtml">IGN_Siteblocks_Adminhtml</siteblocks> </modules> </args> </adminhtml> </routers> </admin> <defalut> </defalut> </config>
ãããŠãapp / locale / en_US /ãã©ã«ããŒã«IGN_Siteblocks.csvãã¡ã€ã«ãäœæããŸãã ãã©ãŒã ã®å
容ïŒ
ãäžéšã®ããã¹ããããäžéšã®ããã¹ãã ã
ç¬èªã®ãã«ããŒã䜿çšããŠããã¹ãã衚瀺ããããšããŸããããã®å Žåãã¢ãžã¥ãŒã«ã®ç°ãªãèšèªãžã®ããŒã«ã©ã€ãºãç°¡çŽ åãããŸãã
翻蚳ãã¡ã€ã«ãé©åãªãã±ãŒã«ã«ã³ããŒãã2çªç®ã®åã翻蚳ããã ãã§ååã§ããã³ãŒãã詳ãã調ã¹ãå¿
èŠã¯ãããŸããã

管çããã«ã®ã¢ãžã¥ãŒã«æ§æ
ãããªïŒMagento管çããã«ã®ã¢ãžã¥ãŒã«æ§æ
ã¬ãã¹ã³ã§äœæããã
IGN_Siteblocks-5.zipã¢ãžã¥ãŒã«ã®æ§é
ã¢ãžã¥ãŒã«ã«æè»æ§ãæãããããã«ãã¢ãžã¥ãŒã«èšå®ãå«ãããŒãžãäœæããŸãã ããã¯ãçŽç²ã«xmlãã¡ã€ã«ãéããŠè¡ãããŸãã 2ã€ã®ãã¡ã€ã«ãäœæããå¿
èŠããããŸãã
system.xml-ãã£ãŒã«ãã远å ãããå Žæ
adminhtml.xml-ã»ã¯ã·ã§ã³ãšã¢ã¯ã»ã¹æš©ã瀺ãããå Žæ
ãŸããconfig.xmlãã¡ã€ã«ã®ããã©ã«ãã»ã¯ã·ã§ã³ã§æšæºèšå®ãæå®ã§ããŸãã
ã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ etc / config.xml <?xml version="1.0" ?> <config> <modules> <IGN_Siteblocks> <version>1.0.0</version> </IGN_Siteblocks> </modules> <global> <models> <siteblocks> <class>IGN_Siteblocks_Model</class> <resourceModel>siteblocks_resource</resourceModel> </siteblocks> <siteblocks_resource> <class>IGN_Siteblocks_Resource</class> <entities> <block> <table>ign_siteblock</table> </block> </entities> </siteblocks_resource> </models> <resources> <siteblocks_setup> <setup> <module>IGN_Siteblocks</module> </setup> </siteblocks_setup> </resources> <helpers> <siteblocks> <class>IGN_Siteblocks_Helper</class> </siteblocks> </helpers> </global> <frontend> <routers> <siteblocks> <use>standard</use> <args> <module>IGN_Siteblocks</module> <frontName>siteblocks</frontName> </args> </siteblocks> </routers> <translate> <modules> <IGN_Siteblocks> <files> <default>IGN_Siteblocks.csv</default> </files> </IGN_Siteblocks> </modules> </translate> </frontend> <admin> <routers> <adminhtml> <args> <modules> <siteblocks after="Mage_Adminhtml">IGN_Siteblocks_Adminhtml</siteblocks> </modules> </args> </adminhtml> </routers> </admin> <defalut> <siteblocks> <settings> <enabled>1</enabled> <block_count>10</block_count> </settings> </siteblocks> </defalut> </config>
ã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ etc / adminhtml.xml <?xml version="1.0"?> <config> <acl> <resources> <admin> <children> <system> <children> <config> <children> <siteblocks translate="title" module="siteblocks"> <title>Siteblocks</title> </siteblocks> </children> </config> </children> </system> </children> </admin> </resources> </acl> </config>
ã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ etc / system.xml <?xml version="1.0"?> <config> <tabs> <ign translate="label" module="siteblocks"> <label>IGN</label> <sort_order>2</sort_order> </ign> </tabs> <sections> <siteblocks module="siteblocks" translate="label"> <label>Siteblocks</label> <tab>ign</tab> <frontend>text</frontend> <sort_order>1</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> <groups> <settings module="siteblocks" translate="label"> <label>Settings</label> <expanded>1</expanded> <sort_order>1</sort_order> <show_in_default>1</show_in_default> <show_in_Website>1</show_in_Website> <show_in_store>1</show_in_store> <fields> <enabled translate="label comment" module="siteblocks"> <label>Enabled</label> <frontend_type>select</frontend_type> <source_model>siteblocks/source_status</source_model> <sort_order>1</sort_order> <show_in_default>1</show_in_default> <show_in_Website>1</show_in_Website> <show_in_store>1</show_in_store> <comment>Is module enabled</comment> </enabled> <blocks_count> <label>Blocks on page</label> <frontend_type>text</frontend_type> <sort_order>2</sort_order> <show_in_default>1</show_in_default> <show_in_Website>1</show_in_Website> <show_in_store>1</show_in_store> <depends><enabled>1</enabled></depends> </blocks_count> <raw_text> <label>Raw text</label> <frontend_type>textarea</frontend_type> <sort_order>3</sort_order> <show_in_default>1</show_in_default> <show_in_Website>1</show_in_Website> <show_in_store>1</show_in_store> <depends><enabled>1</enabled></depends> </raw_text> </fields> </settings> </groups> </siteblocks> </sections> </config>
èšå®ã§ã¯ããªãã·ã§ã³ãå«ãããããããŠã³ã衚瀺ããããããã®ãªãã·ã§ã³ã®ç¬èªã®ã¢ãã«ã䜿çšãããŸããã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ã¢ãã«/ãœãŒã¹/ Status.php <?php class IGN_Siteblocks_Model_Source_Status { const ENABLED = '1'; const DISABLED = '0'; public function toOptionArray() { return array( array('value' => self::ENABLED, 'label'=>Mage::helper('siteblocks')->__('Enabled')), array('value' => self::DISABLED, 'label'=>Mage::helper('siteblocks')->__('Disabled')), ); } public function toArray() { return array( self::DISABLED => Mage::helper('siteblocks')->__('Disabled'), self::ENABLED => Mage::helper('siteblocks')->__('Enabled'), ); }

ããã³ããšã³ããããã¯ãã¬ã€ã¢ãŠãããã³ãã¬ãŒã
ãããªïŒããã³ããšã³ããããã¯ãã¬ã€ã¢ãŠããMagentoãã³ãã¬ãŒã
ã¬ãã¹ã³ã§äœæãããIGN_Siteblocks-6.zip ã¢ãžã¥ãŒã«ã®æ§é ã¯ãã¹ãã¢ã®ããã³ããšã³ãéšåã«é¢ããæ
å ±ã衚瀺ããããšããŠããŸãããŸããã¿ã€ãã«ããæšæž¬ããã®ã¯é£ãããªãããããããã¯ãã¬ã€ã¢ãŠãããã³ãã¬ãŒãã®3çš®é¡ã®ãã¡ã€ã«ã䜿çšããŸãããããã¯ã¯ãæ
å ±ã®æºåãšè¡šç€ºãæ
åœããã¯ã©ã¹ã§ãããããã¯ã¯ãã³ãã¬ãŒãã®è¡šç€ºã«äœ¿çšãããŸãããåžžã«ã§ã¯ãããŸããããã³ãã¬ãŒãã䜿çšãããå Žåãããã¯åã«fetchViewã¡ãœããã«å«ãŸã
ãŸãããããã£ãŠã$ thisãä»ããŠãã³ãã¬ãŒããããããã¯ã«ã¢ã¯ã»ã¹ããŸããã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ãããã¯/List.php <?php class IGN_Siteblocks_Block_List extends Mage_Core_Block_Template { public function getBlocks() {
ãããã¯ã¯Mage_Core_Block_Templateã¯ã©ã¹ãç¶æ¿ããŸãããã ãããŠãããã®åºåå
容ã«ãã£ãŠç°ãªããŸãããã®ãããããšãã°ã補åããªã¹ããããšãã¯ãMage_Catalog_Block_Product_Listãããã¯ããç¶æ¿ããããšããå§ãããŸããã¬ã€ã¢ãŠãã¯ãããŒãžã®æ§é ãããŒãžã«è¡šç€ºããèŠçŽ ãšãã®é åºãæ§ç¯ããããã«äœ¿çšãããŸããã¬ã€ã¢ãŠããã¡ã€ã«ãäœæããŸããã¢ããª/ãã¶ã€ã³/ããã³ããšã³ã/ããŒã¹/ããã©ã«ã/ã¬ã€ã¢ãŠã/ siteblocks.xml <?xml version="1.0"?> <layout version="1.0.0"> <siteblocks_index_index> <reference name="head"> <action method="setTitle"> <title>My Siteblocks</title> </action> </reference> <reference name="content"> <block name="siteblocks.list" as="siteblocks" type="siteblocks/list" template="siteblocks/list.phtml"/> </reference> </siteblocks_index_index> <catalog_category_default> <reference name="left"> <block name="siteblocks.list" as="siteblocks" type="siteblocks/list" template="siteblocks/list.phtml"/> </reference> <reference name="right"> <block name="siteblocks.list" as="siteblocks" type="siteblocks/list" template="siteblocks/list.phtml"/> </reference> </catalog_category_default> <catalog_product_view> <reference name="product.info.extrahint"> <block name="siteblocks.list" before="-" as="siteblocks" type="siteblocks/list" template="siteblocks/list.phtml"/> </reference> </catalog_product_view> </layout>
ã¬ã€ã¢ãŠãã§ã¯ãjsãcssãã¡ã€ã«ããããã«è¿œå ã§ããŸããèå³ã®ããããŒãžã§ãããã¯ã远å ãŸãã¯åé€ã§ããŸããã¬ã€ã¢ãŠãã®ããŒãã¯éåžžã«åºç¯å²ã§ãããäžèšããããµã€ãã®è€æ°ã®å Žæã«ãããã¯ã远å ããæå°éã®ã·ã³ãã«ãªã¬ã€ã¢ãŠããæäŸããŸãããå¥ã®æ¹æ³ïŒã¢ãã¯ã¢ãããªãïŒã§ãã³ã³ãããŒã©ãŒã«HTMLã³ãŒãã衚瀺ã§ããŸãã $html = Mage::app()->getLayout()->createBlock('siteblocks/list')->setTemplate('siteblocks/list.phtml')->toHtml() $this->getResponse()->setBody($html);
ãããŠããã®ãããã¯ã®ã¿ã®HTMLã³ãŒãã衚瀺ãããŸããããã¯ãAJAXãªã¯ãšã¹ãã䜿çšããå Žåãªã©ã«å¿
èŠã«ãªãããšããããããŸããã¬ã€ã¢ãŠãã§ã¯ããã¡ã€ã«siteblocks / list.phtmlã«èšåããŠããŸãããã³ãã¬ãŒãã§ããã©ã«ãã§æå®ããå Žåã¯çç¥ã§ããŸãã class IGN_Siteblocks_Block_List extends Mage_Core_Block_Template { protected $_template = 'siteblocks/list.phtml'; }
ãã³ãã¬ãŒããäœæããŸããã¢ããª/ãã¶ã€ã³/ããŒã¹/ããã©ã«ã/ãã³ãã¬ãŒã/ãµã€ããããã¯/ list.phtml <?php foreach($this->getBlocks() as $block):?> <div class="siteblock"> <div class="block-title"><?php echo $block->getTitle()?></div> <div class="block-content"><?php echo $block->getContent()?></div> </div> <?php endforeach;?>
ã³ãŒãã§ãããããã«ãgetBlocksãããã¯ã¡ãœãããåŒã³åºããŠãå°å·ããã¬ã³ãŒãã®ã³ã¬ã¯ã·ã§ã³ãè¿ããŸããTestControllerã®ååã倿Žããããæ°ãããã®ãäœæããŸããã€ã³ããã¯ã¹ã³ã³ãããŒã©ãŒã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ã³ã³ãããŒã©ãŒ/ IndexController.php <?php class IGN_Siteblocks_IndexController extends Mage_Core_Controller_Front_Action { public function indexAction() { $this->loadLayout();
åºåã衚瀺ãããURLã¯ãexample.com / siteblocks / index / indexãŸãã¯example.com/siteblocksã§ããindex / indexã¯çç¥ã§ããŸããã¬ã€ã¢ãŠãå
ã®ãã³ãã«ã¯ãsiteblocks_index_indexã䜿çšããŸããã¬ã³ãŒãã®åºåãèŠãã«ã¯ãããããããŒã¿ããŒã¹ã«çŽæ¥è¿œå ããããç·šéãã©ãŒã ã®éçºã®æ¬¡ã®ã¹ãããã«é²ãå¿
èŠããããŸãã
管çã€ã³ã¿ãŒãã§ãŒã¹ãã°ãªãããç·šéãã©ãŒã ã
ãããªïŒç®¡çã€ã³ã¿ãŒãã§ã€ã¹ãã°ãªãããMagentoç·šéãã©ãŒã
ã¬ãã¹ã³ã§äœæãããIGN_Siteblocks-7.zip ã¢ãžã¥ãŒã«ã®æ§é 管çã€ã³ã¿ãŒãã§ãŒã¹ã®äœæããã»ã¹ã¯ãããã€ãã®æ®µéã§æ§æãããŠããŸãã- ã¡ãã¥ãŒã«ã¢ã€ãã ã远å ããŸã
- ãããã¯ãäœæãã
- ã³ã³ãããŒã©ãŒãäœæãã
ã¡ãã¥ãŒã«ã¢ã€ãã ã远å ããŸããã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ etc / adminhtml.xml <?xml version="1.0"?> <config> <acl> <resources> <admin> <children> <system> <children> <config> <children> <siteblocks translate="title" module="siteblocks"> <title>Siteblocks</title> </siteblocks> </children> </config> </children> </system> <cms> <children> <siteblocks translate="title" module="siteblocks"> <title>Siteblocks</title> </siteblocks> </children> </cms> </children> </admin> </resources> </acl> <menu> <cms> <children> <siteblocks translate="title" module="siteblocks"> <title>Siteblocks</title> <action>adminhtml/siteblocks</action> <sort_order>20</sort_order> </siteblocks> </children> </cms> </menu> </config>
æ£ããã»ã¯ã·ã§ã³ã³ãŒãïŒcmsã®äŸïŒã¯ãæšæºã®Magentoã¢ãžã¥ãŒã«ã®adminhtml.xmlãã¡ã€ã«ã«ãããŸããããã§ãç¬èªã®ã»ã¯ã·ã§ã³ãäœæããæ¹æ³ãåç
§ããŠãã ãããaclãããã¯ã®æ
å ±ãè€è£œããããšãå¿ããªãã§ãã ãããã³ã³ãããŒã©ãŒãš1ã€ã®ã¢ã¯ã·ã§ã³ãäœæããŠéå§ããŸããã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ã³ã³ãããŒã©ãŒ/ Adminhtml / SiteblocksController.php <?php class IGN_Siteblocks_Adminhtml_SiteblocksController extends Mage_Adminhtml_Controller_Action { public function indexAction() { $this->loadLayout(); $this->_addContent($this->getLayout()->createBlock('siteblocks/adminhtml_siteblocks')); $this->renderLayout(); } }
管çããã«ã®ã¬ã€ã¢ãŠããäœæã§ããŸãããå¿
èŠãªãããã¯ãã³ã³ãããŒã©ãŒã«çŽæ¥è¿œå ã§ããŸããããã§ãã³ã³ãã³ãã«ããŒãžã远å ããŸãããã€ã³ããã¯ã¹ã¢ã¯ã·ã§ã³ã¯ãã°ãªããã¬ã³ãŒããå«ãããŒãžã衚瀺ããŸããããã§ããããã¯ã®äœæã«é²ãããšãã§ããŸããã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN / Siteblocks / Block / Adminhtml / Siteblocks.php <?php class IGN_Siteblocks_Block_Adminhtml_Siteblocks extends Mage_Adminhtml_Block_Widget_Grid_Container { public function __construct() { $this->_controller = 'adminhtml_siteblocks'; $this->_blockGroup = 'siteblocks'; $this->_headerText = Mage::helper('siteblocks')->__('Siteblocks'); $this->_addButtonLabel = Mage::helper('siteblocks')->__('Add New Block'); parent::__construct(); } }
ãã®ãããªããããã£å€ãç»é²ããçç±ã¯ãMage_Adminhtml_Block_Widget_Grid_Containerã¯ã©ã¹ã®ã¡ãœããã§ç¢ºèª
ã§ããŸããããããŠãã°ãªãããããã¯ã®ãããã¯ã¿ã€ãã圢æãããŸããã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN / Siteblocks / Block / Adminhtml / Siteblocks / Grid.php <?php class IGN_Siteblocks_Block_Adminhtml_Siteblocks_Grid extends Mage_Adminhtml_Block_Widget_Grid { public function __construct() { parent::__construct(); $this->setId('cmsBlockGrid'); $this->setDefaultSort('block_identifier'); $this->setDefaultDir('ASC'); } protected function _prepareCollection() { $collection = Mage::getModel('siteblocks/block')->getCollection(); $this->setCollection($collection); return parent::_prepareCollection(); } protected function _prepareColumns() { $this->addColumn('title', array( 'header' => Mage::helper('siteblocks')->__('Title'), 'align' => 'left', 'index' => 'title', )); $this->addColumn('block_status', array( 'header' => Mage::helper('cms')->__('Status'), 'align' => 'left', 'type' => 'options', 'options' => Mage::getModel('siteblocks/source_status')->toArray(), 'index' => 'block_status' )); $this->addColumn('created_at', array( 'header' => Mage::helper('siteblocks')->__('Created At'), 'index' => 'created_at', 'type' => 'date', )); return parent::_prepareColumns(); } protected function _prepareMassaction() { $this->setMassactionIdField('block_id'); $this->getMassactionBlock()->setIdFieldName('block_id'); $this->getMassactionBlock() ->addItem('delete', array( 'label' => Mage::helper('siteblocks')->__('Delete'), 'url' => $this->getUrl('*/*/massDelete'), 'confirm' => Mage::helper('siteblocks')->__('Are you sure?') ) ) ->addItem('status', array( 'label' => Mage::helper('siteblocks')->__('Update status'), 'url' => $this->getUrl('*/*/massStatus'), 'additional' => array('block_status'=> array( 'name' => 'block_status', 'type' => 'select', 'class' => 'required-entry', 'label' => Mage::helper('siteblocks')->__('Status'), 'values' => Mage::getModel('siteblocks/source_status')->toOptionArray() ) ) ) ); return $this; } public function getRowUrl($row) { return $this->getUrl('*/*/edit', array('block_id' => $row->getId())); } }
ãã®å Žåã®ã°ãªãããããã¯ã¯ãã®åœ¢åŒãåããŸããååãšããŠãã¡ãœãããšããããã£ã®ååã«ãããåã®è¿œå æ¹æ³ãç·šéããŒãžã§ã®URLã®åœ¢ææ¹æ³ãã¬ã³ãŒãã®ã³ã¬ã¯ã·ã§ã³ãããŒãã«ã§ã®åºåçšã«æºåãããæ¹æ³ãçè§£ã§ããŸããããã©ã«ãã®åã¿ã€ããšãã®æ§ç¯ã®ååã¯ãapp / code / core / Mage / Adminhtml / Block / Widget / Grid / Column / Renderer / folderã«ããããšã«æ³šæããŠãã ãããç·šéããŒãžããã³ã³ãããããã¯ãšãã©ãŒã ãããã¯ã®2ã€ã®ãããã¯ã§æ§æãããŸããã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ãããã¯/ Adminhtml /ãµã€ããããã¯/ Edit.php <?php class IGN_Siteblocks_Block_Adminhtml_Siteblocks_Edit extends Mage_Adminhtml_Block_Widget_Form_Container { public function __construct() { $this->_objectId = 'block_id'; $this->_controller = 'adminhtml_siteblocks'; $this->_blockGroup = 'siteblocks'; parent::__construct(); $this->_updateButton('save', 'label', Mage::helper('siteblocks')->__('Save Block')); $this->_updateButton('delete', 'label', Mage::helper('siteblocks')->__('Delete Block')); $this->_addButton('saveandcontinue', array( 'label' => Mage::helper('adminhtml')->__('Save and Continue Edit'), 'onclick' => 'saveAndContinueEdit()', 'class' => 'save', ), -100); $this->_formScripts[] = " function saveAndContinueEdit(){ editForm.submit($('edit_form').action+'back/edit/'); } "; } public function getHeaderText() { if (Mage::registry('siteblocks_block')->getId()) { return Mage::helper('siteblocks')->__("Edit Block '%s'", $this->escapeHtml(Mage::registry('siteblocks_block')->getTitle())); } else { return Mage::helper('siteblocks')->__('New Block'); } } }
ãããŠãããã§ããããã£ã®å€ã¯èŠªã¯ã©ã¹ã®ã¡ãœããã«åãããŠèª¿æŽããããããã¯ã¿ã€ãsiteblocks / adminhtml_siteblocks_edit_formãã©ãŒã ã¯ã©ã¹ãååŸããŸããã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ãããã¯/ Adminhtml /ãµã€ããããã¯/ç·šé/ Form.php <?php class IGN_Siteblocks_Block_Adminhtml_Siteblocks_Edit_Form extends Mage_Adminhtml_Block_Widget_Form { public function __construct() { parent::__construct(); $this->setId('block_form'); $this->setTitle(Mage::helper('siteblocks')->__('Block Information')); } protected function _prepareForm() { $model = Mage::registry('siteblocks_block'); $form = new Varien_Data_Form( array( 'id' => 'edit_form', 'action' => $this->getUrl('*/*/save',array('block_id'=>$this->getRequest()->getParam('block_id'))), 'method' => 'post' ) ); $form->setHtmlIdPrefix('block_'); $fieldset = $form->addFieldset('base_fieldset', array('legend'=>Mage::helper('siteblocks')->__('General Information'), 'class' => 'fieldset-wide')); if ($model->getBlockId()) { $fieldset->addField('block_id', 'hidden', array( 'name' => 'block_id', )); } $fieldset->addField('title', 'text', array( 'name' => 'title', 'label' => Mage::helper('siteblocks')->__('Block Title'), 'title' => Mage::helper('siteblocks')->__('Block Title'), 'required' => true, )); $fieldset->addField('block_status', 'select', array( 'label' => Mage::helper('siteblocks')->__('Status'), 'title' => Mage::helper('siteblocks')->__('Status'), 'name' => 'block_status', 'required' => true, 'options' => Mage::getModel('siteblocks/source_status')->toArray(), )); $fieldset->addField('content', 'textarea', array( 'name' => 'content', 'label' => Mage::helper('siteblocks')->__('Content'), 'title' => Mage::helper('siteblocks')->__('Content'), 'style' => 'height:36em', 'required' => true, )); $form->setValues($model->getData()); $form->setUseContainer(true); $this->setForm($form); return parent::_prepareForm(); } }
ãã£ãŒã«ãã¯ç°¡åãªæ¹æ³ã§è¿œå ããããªãã·ã§ã³ã®æç¢ºãªã»ããããããæšæºãã£ãŒã«ãã®ã¿ã€ãã¯lib / Varien / Data / Form / Element /ãã©ã«ããŒã«ãããŸããããã§ããªããµã€ããããã¯ã¢ãã«ã®ã€ã³ã¹ã¿ã³ã¹ãããã®ãââãèŠãŠã¿ãŸãããã$ model = Mage :: registryïŒ 'siteblocks_block'ïŒ; æ®ãã®ã¢ã¯ã·ã§ã³ãã³ã³ãããŒã©ãŒã«è¿œå ããŸããã¬ã³ãŒããç·šéãä¿åãåé€ããã¢ã¯ã·ã§ã³ãå¿
èŠã§ãããŸãããŠãŒã¶ãŒãããŒãã«å
ã®è€æ°ã®è¡ãéžæãããããã®ããŒã¯ããããšã³ããªã®åé€ãã¿ã³ãã¯ãªãã¯ã§ããå Žåãäžæ¬åé€ããã³ã¹ããŒã¿ã¹å€æŽã®ã¢ã¯ã·ã§ã³ã远å ããŸããã³ã³ãããŒã©ãŒã®åœ¢åŒã¯æ¬¡ã®ãšããã§ããã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ã³ã³ãããŒã©ãŒ/ Adminhtml / SiteblocksController.php <?php class IGN_Siteblocks_Adminhtml_SiteblocksController extends Mage_Adminhtml_Controller_Action { public function indexAction() { $this->loadLayout(); $this->_addContent($this->getLayout()->createBlock('siteblocks/adminhtml_siteblocks')); $this->renderLayout(); } public function newAction() { $this->_forward('edit'); } public function editAction() { $id = $this->getRequest()->getParam('block_id'); Mage::register('siteblocks_block',Mage::getModel('siteblocks/block')->load($id)); $blockObject = (array)Mage::getSingleton('adminhtml/session')->getBlockObject(true); if(count($blockObject)) { Mage::registry('siteblocks_block')->setData($blockObject); } $this->loadLayout(); $this->_addContent($this->getLayout()->createBlock('siteblocks/adminhtml_siteblocks_edit')); $this->renderLayout(); } public function saveAction() { try { $id = $this->getRequest()->getParam('block_id'); $block = Mage::getModel('siteblocks/block')->load($id); $block ->setData($this->getRequest()->getParams()) ->setCreatedAt(Mage::app()->getLocale()->date()) ->save(); if(!$block->getId()) { Mage::getSingleton('adminhtml/session')->addError('Cannot save the block'); } } catch(Exception $e) { Mage::logException($e); Mage::getSingleton('adminhtml/session')->addError($e->getMessage()); Mage::getSingleton('adminhtml/session')->setBlockObject($block->getData()); return $this->_redirect('*/*/edit',array('block_id'=>$this->getRequest()->getParam('block_id'))); } Mage::getSingleton('adminhtml/session')->addSuccess('Block was saved successfully!'); $this->_redirect('*/*/'.$this->getRequest()->getParam('back','index'),array('block_id'=>$block->getId())); } public function deleteAction() { $block = Mage::getModel('siteblocks/block') ->setId($this->getRequest()->getParam('block_id')) ->delete(); if($block->getId()) { Mage::getSingleton('adminhtml/session')->addSuccess('Block was deleted successfully!'); } $this->_redirect('*/*/'); } public function massStatusAction() { $statuses = $this->getRequest()->getParams(); try { $blocks= Mage::getModel('siteblocks/block') ->getCollection() ->addFieldToFilter('block_id',array('in'=>$statuses['massaction'])); foreach($blocks as $block) { $block->setBlockStatus($statuses['block_status'])->save(); } } catch(Exception $e) { Mage::logException($e); Mage::getSingleton('adminhtml/session')->addError($e->getMessage()); return $this->_redirect('*/*/'); } Mage::getSingleton('adminhtml/session')->addSuccess('Blocks were updated!'); return $this->_redirect('*/*/'); } public function massDeleteAction() { $blocks = $this->getRequest()->getParams(); try { $blocks= Mage::getModel('siteblocks/block') ->getCollection() ->addFieldToFilter('block_id',array('in'=>$blocks['massaction'])); foreach($blocks as $block) { $block->delete(); } } catch(Exception $e) { Mage::logException($e); Mage::getSingleton('adminhtml/session')->addError($e->getMessage()); return $this->_redirect('*/*/'); } Mage::getSingleton('adminhtml/session')->addSuccess('Blocks were deleted!'); return $this->_redirect('*/*/'); } }
ããã§ãã¢ãžã¥ãŒã«ã§ã¬ã³ãŒããç·šéããããã³ããšã³ãéšåã«è¡šç€ºã§ããŸãã
ã€ãã³ããšãªã¹ããŒ
ãããªïŒMagentoã®ã€ãã³ããšãªã¹ããŒ
ã¬ãã¹ã³ã§äœæãããIGN_Siteblocks-8.zip ã¢ãžã¥ãŒã«ã®æ§é Magentoã§ã€ãã³ããªã¹ããŒãã³ãã¬ãŒãã䜿çšã§ããŸããã¢ãžã¥ãŒã«ã§ãµã€ãã®ç¹å®ã®ç¬éããã£ããã§ããã®ã¯äœã§ããããã€ãããºã ãæè»æ§ã远å ããèªååã匷åããŸãããŸããMagentoã«ã¯å€ãã®æšæºã€ãã³ããå®è£
ãããŠããŸãã ãMage :: dispatchEventããšããããã¹ãã®Magentoãã¡ã€ã«ãæ€çŽ¢ããŸãããŸãã¯ããªã³ã¯ãã芧ãã ãããããã¯æç€ºçãªã€ãã³ãã«ãããã®ã§ãåã¢ãã«ãåãããã¯ãŸãã¯ã³ã³ãããŒã©ãŒã¢ã¯ã·ã§ã³ã§çºçããã€ãã³ãããŸã ãããŸããååãšããŠãããã¯äºåããã³äºåŸã€ãã³ãã§ããmodel_save_beforeãmodel_save_afterãcontroller_action_predispatchãcontroller_action_postdispatchãcore_block_abstract_to_html_beforeãcore_block_abstract_to_html_afterããã«ãã¯ã©ã¹ã®event_prefixãŸãã¯ã³ã³ãããŒã©ãŒã®ã«ãŒãåã䜿çšããã€ãã³ãïŒsiteblocks_save_beforeãcontroller_action_predispatch_siteblocks ...ïŒããŸããŸãªããªãšãŒã·ã§ã³ãããããã®ã·ã¹ãã ã®ãããã§ãç®çã®ã€ãã³ããç°¡åã«ããã£ãããã§ããŸããã³ãŒãå
ã®ä»»æã®å Žæã§ã€ãã³ããçŽæ¥äœæã§ããŸãã Mage::dispatchEvent('some_event_name',array('myparam' => $someVar));
ãªã¹ããŒã¯config.xmlã§å®£èšãããŠããŸãããŸãã3ã€ã®ãªãã·ã§ã³ããããŸãïŒglobalãadminhtmlãfrontendããããã£ãŠãããã¯ãªã¹ããŒã«åãããããã ãã®åé¢ã§ããèšå®ã¯æ¬¡ã®åœ¢åŒãåããŸããã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ etc / config.xml <?xml version="1.0" ?> <config> <modules> <IGN_Siteblocks> <version>1.0.0</version> </IGN_Siteblocks> </modules> <global> <blocks> <siteblocks> <class>IGN_Siteblocks_Block</class> </siteblocks> </blocks> <models> <siteblocks> <class>IGN_Siteblocks_Model</class> <resourceModel>siteblocks_resource</resourceModel> </siteblocks> <siteblocks_resource> <class>IGN_Siteblocks_Model_Resource</class> <entities> <block> <table>ign_siteblock</table> </block> </entities> </siteblocks_resource> </models> <resources> <siteblocks_setup> <setup> <module>IGN_Siteblocks</module> </setup> </siteblocks_setup> </resources> <helpers> <siteblocks> <class>IGN_Siteblocks_Helper</class> </siteblocks> </helpers> </global> <frontend> <events> <checkout_cart_product_add_after> <observers> <siteblocks> <class>siteblocks/observer</class> <method>checkout_cart_product_add_after</method> <type>model</type> </siteblocks> </observers> </checkout_cart_product_add_after> </events> <layout> <updates> <siteblocks module="siteblocks"> <file>siteblocks.xml</file> </siteblocks> </updates> </layout> <routers> <siteblocks> <use>standard</use> <args> <module>IGN_Siteblocks</module> <frontName>siteblocks</frontName> </args> </siteblocks> </routers> <translate> <modules> <IGN_Siteblocks> <files> <default>IGN_Siteblocks.csv</default> </files> </IGN_Siteblocks> </modules> </translate> </frontend> <admin> <routers> <adminhtml> <args> <modules> <siteblocks after="Mage_Adminhtml">IGN_Siteblocks_Adminhtml</siteblocks> </modules> </args> </adminhtml> </routers> </admin> <default> <siteblocks> <settings> <enabled>1</enabled> <block_count>10</block_count> </settings> </siteblocks> </default> </config>
ãã¹ã±ããã«è£œåã远å ããã€ãã³ãã«ãªã¹ããŒã1人远å ããŸãããæ¬¡ã«ããªã¹ããŒã¯ã©ã¹ãäœæããå¿
èŠããããŸãããã®ã¯ã©ã¹ããªããŠããã¢ãã«ã«ããžãã¯ã远å ã§ããŸããããããããã¯æªã圢ã§ãããããã£ãŠãObserver.phpã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ã¢ãã«/ Observer.php <?php class IGN_Siteblocks_Model_Observer {
ãã®ã¡ãœããã§ã¯ãå¿
èŠãªãã¹ãŠã®æäœãå®è¡ã§ããŸããæ¬¡ã«ããã¹ã±ããããã¢ã€ãã ã®å
容ãå°å·ããŸããïŒåŸã§ãã®ã³ãŒããã³ã¡ã³ãã¢ãŠãããŸããããããªããšããã¹ã±ããã«è£œåã远å ã§ããŸããïŒã
Cronããã³ã¹ã±ãžã¥ãŒã«ãããã¿ã¹ã¯
ãããªïŒMagentoã®Cronããã³ã¹ã±ãžã¥ãŒã«ãããã¿ã¹ã¯
ã¬ãã¹ã³ã§äœæãããIGN_Siteblocks-9.zip ã¢ãžã¥ãŒã«ã®æ§é ã¯ãã¢ãžã¥ãŒã«ã®äœæ¥ããã»ã¹ãšã¹ãã¢ã®äœæ¥ãèªååããéã®ãã1ã€ã®åŒæ°ã§ããã¹ã±ãžã¥ãŒã«ãããã¿ã¹ã¯ãäœæããããšãã§ããŸãããŸã第äžã«ãMagentoã¯ã©ãŠã³ã®èµ·åãèšå®ããå¿
èŠããããæ¢ã«èµ·åãããŠããMagentoãã¡ã€ã«ã¯ãã©ã®ã¿ã¹ã¯ãå®è¡ãããã«ãã£ãŠèªåçã«é
åžãããŸããã³ã³ãœãŒã«ã§Magento cronãã»ããã¢ããããŸãã crontab -e * * * * * php /var/www/magento.dev/cron.php
ããã§ã®è©³çްæ
å ±ïŒhelp.ubuntu.ru/wiki/cronããŸãã¯ãèšå®ã¯ã§ããŸããããå¿
èŠãªãšãã«ã¯ã©ãŠã³ãå®è¡ããŸããexample.com/ cron.phpã®ãããªãªã³ã¯ãã¯ãªãã¯ããã ãã§ãconfig.xmlã®ã¿ã¹ã¯ãå¥ã®crontabãããã¯ã§å®£èšããŸããæŽæ°ããããã¡ã€ã«ãã¥ãŒïŒã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ etc / config.xml <?xml version="1.0" ?> <config> <modules> <IGN_Siteblocks> <version>1.0.0</version> </IGN_Siteblocks> </modules> <global> <blocks> <siteblocks> <class>IGN_Siteblocks_Block</class> </siteblocks> </blocks> <models> <siteblocks> <class>IGN_Siteblocks_Model</class> <resourceModel>siteblocks_resource</resourceModel> </siteblocks> <siteblocks_resource> <class>IGN_Siteblocks_Model_Resource</class> <entities> <block> <table>ign_siteblock</table> </block> </entities> </siteblocks_resource> </models> <resources> <siteblocks_setup> <setup> <module>IGN_Siteblocks</module> </setup> </siteblocks_setup> </resources> <helpers> <siteblocks> <class>IGN_Siteblocks_Helper</class> </siteblocks> </helpers> </global> <frontend> <events> <controller_action_predispatch> </controller_action_predispatch> <checkout_cart_product_add_after> <observers> <siteblocks> <class>siteblocks/observer</class> <method>checkout_cart_product_add_after</method> <type>model</type> </siteblocks> </observers> </checkout_cart_product_add_after> </events> <layout> <updates> <siteblocks module="siteblocks"> <file>siteblocks.xml</file> </siteblocks> </updates> </layout> <routers> <siteblocks> <use>standard</use> <args> <module>IGN_Siteblocks</module> <frontName>siteblocks</frontName> </args> </siteblocks> </routers> <translate> <modules> <IGN_Siteblocks> <files> <default>IGN_Siteblocks.csv</default> </files> </IGN_Siteblocks> </modules> </translate> </frontend> <admin> <routers> <adminhtml> <args> <modules> <siteblocks after="Mage_Adminhtml">IGN_Siteblocks_Adminhtml</siteblocks> </modules> </args> </adminhtml> </routers> </admin> <default> <siteblocks> <settings> <enabled>1</enabled> <block_count>10</block_count> </settings> </siteblocks> </default> <crontab> <jobs> <siteblocks_clear_cache> <schedule> <cron_expr>*/10 * * * *</cron_expr> </schedule> <run> <model>siteblocks/cron::siteblocks_clear_cache</model> </run> </siteblocks_clear_cache> </jobs> </crontab> </config>
ã¿ã¹ã¯ã«ã¯ãåå¥ã®ãã¡ã€ã«Cron.phpã䜿çšããŸãã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ã¢ãã«/ Cron.php <?php class IGN_Siteblocks_Model_Cron { public function siteblocks_clear_cache() {

管çããã«ã§ã¬ã³ãã©ãŒã䜿çšãã
ãããªïŒMagento管çé åã§ã®ã¬ã³ããªã³ã°ã®äœ¿çš
ã¬ãã¹ã³ã§äœæãããIGN_Siteblocks-10.zip ã¢ãžã¥ãŒã«ã®æ§é å€ãã®å Žåãæšæºã®èŠçŽ ã§ã¯ç®çã®æ©èœãå®è£
ããã«ã¯äžååã§ãããããã£ãŠãç®çã®èŠçŽ ã®ã¬ã³ãã©ãŒãäœæããããšãã§ãããã®ããã»ã¹ã«å€ãã®æéã¯å¿
èŠãããŸããããã©ãŒã èŠçŽ ã®ã¬ã³ãã©ãŒãäœæããããšãæ€èšããŠãã ããã管çãã©ãŒã ããããŸãïŒã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ãããã¯/ Adminhtml /ãµã€ããããã¯/ç·šé/ Form.php <?php class IGN_Siteblocks_Block_Adminhtml_Siteblocks_Edit_Form extends Mage_Adminhtml_Block_Widget_Form { public function __construct() { parent::__construct(); $this->setId('block_form'); $this->setTitle(Mage::helper('siteblocks')->__('Block Information')); } protected function _prepareForm() { $model = Mage::registry('siteblocks_block'); $form = new Varien_Data_Form( array( 'id' => 'edit_form', 'action' => $this->getUrl('*/*/save',array('block_id'=>$this->getRequest()->getParam('block_id'))), 'method' => 'post', 'enctype' => 'multipart/form-data' ) ); $form->setHtmlIdPrefix('block_'); $fieldset = $form->addFieldset('base_fieldset', array( 'legend'=>Mage::helper('siteblocks')->__('General Information'), 'class' => 'fieldset-wide') ); if ($model->getBlockId()) { $fieldset->addField('block_id', 'hidden', array( 'name' => 'block_id', )); } $fieldset->addField('title', 'text', array( 'name' => 'title', 'label' => Mage::helper('siteblocks')->__('Block Title'), 'title' => Mage::helper('siteblocks')->__('Block Title'), 'required' => true, ));
ãã©ãŒã ã«ã¯ã¬ã³ãã©ãŒãäœæããããã®2ã€ã®ãªãã·ã§ã³ããããä»»æã®ãªãã·ã§ã³ã䜿çšã§ããŸãããlib / Varien / Data / Form / Element /ãã©ã«ããŒã«ãã¡ã€ã«ãäœæãããªãã·ã§ã³ã«æéãåããŸããã ãªããªã
ãã®å ŽåãäŸã«åŸã£ãŠã<frontend_type> myimage </ frontend_type>ãç©ããã«ç€ºãsystem.xmlã®ãã£ãŒã«ãã§åãã¬ã³ãã©ãŒã䜿çšã§ããŸãããã¡ã€ã«ã®å
容ïŒã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ãããã¯/ Adminhtml /ãµã€ããããã¯/ç·šé/ã¬ã³ãã©ãŒ/ Myimage.php <?php class IGN_Siteblocks_Block_Adminhtml_Siteblocks_Edit_Renderer_Myimage extends Varien_Data_Form_Element_Abstract { public function __construct($data) { parent::__construct($data); $this->setType('file'); } public function getElementHtml() { $html = ''; if ((string)$this->getValue()) { $url = $this->_getUrl(); if( !preg_match("/^http\:\/\/|https\:\/\//", $url) ) { $url = Mage::getBaseUrl('media') . 'siteblocks' .DS.$url; } $html = '<a href="' . $url . '"' . ' onclick="imagePreview(\'' . $this->getHtmlId() . '_image\'); return false;">' . '<img src="' . $url . '" id="' . $this->getHtmlId() . '_image" title="' . $this->getValue() . '"' . ' alt="' . $this->getValue() . '" height="100" width="100" class="small-image-preview v-middle" />' . '</a> ';
lib / Varien / Data / Form / Element / Myimage.php <?php class Varien_Data_Form_Element_Myimage extends Varien_Data_Form_Element_Abstract { public function __construct($data) { parent::__construct($data); $this->setType('file'); } public function getElementHtml() { $html = ''; if ((string)$this->getValue()) { $url = $this->_getUrl(); if( !preg_match("/^http\:\/\/|https\:\/\//", $url) ) { $url = Mage::getBaseUrl('media') . 'siteblocks' .DS.$url; } $html = '<a href="' . $url . '"' . ' onclick="imagePreview(\'' . $this->getHtmlId() . '_image\'); return false;">' . '<img src="' . $url . '" id="' . $this->getHtmlId() . '_image" title="' . $this->getValue() . '"' . ' alt="' . $this->getValue() . '" height="150" width="150" class="small-image-preview v-middle" />' . '</a> ';
ãããã®ãã¡ã€ã«ã®å
å®¹ãæšæºã®lib / Varien / Data / Form / Element / Image.phpããã³ããŒããããŒãºã«åãããŠã³ãŒãã調æŽããŸãããæ¬¡ã«ãGridåã®ã¬ã³ãã©ãŒãäœæããŸããããããã«å ããŠãã¢ãžã¥ãŒã«æ©èœã«ããã€ãã®è¿œå ãè¡ããŸãããç»åã®èªã¿èŸŒã¿ãšä¿åã®æ©èœãäœæããå¿
èŠããããŸãããã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN / Siteblocks / Block / Adminhtml / Siteblocks / Grid.php <?php class IGN_Siteblocks_Block_Adminhtml_Siteblocks_Grid extends Mage_Adminhtml_Block_Widget_Grid { public function __construct() { parent::__construct(); $this->setId('cmsBlockGrid'); $this->setDefaultSort('block_identifier'); $this->setDefaultDir('ASC'); } protected function _prepareCollection() { $collection = Mage::getModel('siteblocks/block')->getCollection(); $this->setCollection($collection); return parent::_prepareCollection(); } protected function _prepareColumns() { $this->addColumn('title', array( 'header' => Mage::helper('siteblocks')->__('Title'), 'align' => 'left', 'index' => 'title', )); $this->addColumn('image', array( 'header' => Mage::helper('siteblocks')->__('Image'), 'align' => 'left', 'index' => 'image', 'filter' => false, <!-- --> 'sortable' => false,<!-- --> 'renderer' => 'IGN_Siteblocks_Block_Adminhtml_Siteblocks_Grid_Renderer_Image',
ã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ãããã¯/ Adminhtml /ãµã€ããããã¯/ã°ãªãã/ã¬ã³ãã©ãŒ/ Image.php <?php class IGN_Siteblocks_Block_Adminhtml_Siteblocks_Grid_Renderer_Image extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract { public function render(Varien_Object $row) # { if( ! $row->getImage()) { return ''; } $url = Mage::getBaseUrl('media') . 'siteblocks' .DS .$row->getImage(); $html = "<img src='$url' width='100' height='auto'>"; return $html; } }
ã¬ã³ãã©ãŒã§ã$ src URLãçæããç»åã®htmlã³ãŒãã衚瀺ããŸããããã§ã衚ã«åçã衚瀺ãããŸããç»åãã¢ãžã¥ãŒã«ã«ããŒãããã«ã¯ãããã€ãã®è¿œå ãå¿
èŠã§ãã1. config.xmlã®ããŒãžã§ã³ã1.0.1ã«ã¢ããã°ã¬ãŒãããŸã2. upgrade-1.0.0-1.0.1.phpãã¡ã€ã«ãäœæããŸãapp / code / local / IGN / Siteblocks / sql / siteblocks_setup / upgrade-1.0.0-1.0.1.php <?php $installer = $this; $installer->startSetup(); $installer->run(" ALTER TABLE `{$this->getTable('siteblocks/block')}` ADD `image` TEXT NOT NULL; "); $installer->endSetup();
3.ã³ã³ãããŒã©ãŒã§ãé©åãªã³ãŒãã远å ããŸããã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ã³ã³ãããŒã©ãŒ/ Adminhtml / SiteblocksController.php <?php class IGN_Siteblocks_Adminhtml_SiteblocksController extends Mage_Adminhtml_Controller_Action { public function indexAction() { $this->loadLayout(); $this->_addContent($this->getLayout()->createBlock('siteblocks/adminhtml_siteblocks')); $this->renderLayout(); } public function newAction() { $this->_forward('edit'); } public function editAction() { $id = $this->getRequest()->getParam('block_id'); Mage::register('siteblocks_block',Mage::getModel('siteblocks/block')->load($id)); $blockObject = (array)Mage::getSingleton('adminhtml/session')->getBlockObject(true); if(count($blockObject)) { Mage::registry('siteblocks_block')->setData($blockObject); } $this->loadLayout(); $this->_addContent($this->getLayout()->createBlock('siteblocks/adminhtml_siteblocks_edit')); $this->renderLayout(); }
4.ã¡ãã£ã¢/ãµã€ããããã¯/ãã©ã«ããŒãäœæããé©åãªæžãèŸŒã¿æš©éãå²ãåœãŠãããšãå¿ããªãã§ãã ãããããã³ããšã³ãã§ã®ç»åã®è¡šç€ºãå¿ããªãã§ãã ããã
ãã³ãã¬ãŒããç·šéããŸããã¢ããª/ãã¶ã€ã³/ããã³ããšã³ã/ããŒã¹/ããã©ã«ã/ãã³ãã¬ãŒã/ãµã€ããããã¯/ list.phtml <?php foreach($this->getBlocks() as $block):?> <div class="siteblock"> <div class="block-title"><?php echo $block->getTitle()?></div> <div class="block-image"> <?php if($block->getImage()):?> <img src="<?php echo $block->getImageSrc()?>" height="150" width="auto" alt="<?php $block->getTitle()?>" title="<?php $block->getTitle()?>"> <?php endif;?> </div> <div class="block-content"><?php echo $block->getContent() ?></div> </div> <?php endforeach;?>
ã¢ãã«ã«æ°ããgetImageSrcã¡ãœããã远å ããŸããããã®ãªã¹ããæ¬¡ã«ç€ºããŸããã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ã¢ãã«/ Block.php <?php class IGN_Siteblocks_Model_Block extends Mage_Core_Model_Abstract { protected $_eventPrefix = 'siteblocks_block'; public function _construct() { parent::_construct(); $this->_init('siteblocks/block'); } public function getImageSrc() { return Mage::getBaseUrl('media') . 'siteblocks' . DS . $this->getImage(); } }
ã¢ããããŒãããããã«ãµã€ãºã®ç»åã衚瀺ããããšã¯ãå§ãã§ããŸããããçŸåšã®äž»ãªã¿ã¹ã¯ã¯ã¬ã³ãã©ãŒãèšè¿°ããããšã§ãã
WYSIWYGãšãã£ã¿ãŒã®äœ¿çš
ãããªïŒMagento管çããã«ã§WYSIWYGãšãã£ã¿ãŒã䜿çšãã
ã¬ãã¹ã³ã§äœæãããã¢ãžã¥ãŒã«IGN_Siteblocks-11.zipWYSIWYG ã®æ§é ã¯ã衚瀺ããããã®ãååŸãããã®ã§ãïŒè¡šç€ºããããã®ã¯ååŸãããã®ã§ãïŒãããã¯ãã³ã³ãã³ããäœæããããã®äŸ¿å©ãªãšãã£ã¿ãŒã§ãããããŠãç§ãã¡ã®ã¢ãžã¥ãŒã«ã«ã¯ã¢ããªã±ãŒã·ã§ã³ããããŸãããã ãããã®çµã¿èŸŒã¿ã¯äºæ³ã»ã©åçŽã§ã¯ãããŸãããç§ãã¡ã¯ã管çããã«ã®ã¬ã€ã¢ãŠããäœæããå¿
èŠãããããšã«æ°ä»ããŸãããapp / design / adminhtml / default / default / layout / siteblocks.xml <?xml version="1.0"?> <layout version="1.0.0"> <adminhtml_siteblocks_edit> <update handle="editor"/> </adminhtml_siteblocks_edit> <adminhtml_system_config_edit> <update handle="editor"/> </adminhtml_system_config_edit> </layout>
次ã«ãç·šéãã©ãŒã ãæŽæ°ããå¿
èŠããããŸããã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ãããã¯/ Adminhtml /ãµã€ããããã¯/ç·šé/ Form.php <?php class IGN_Siteblocks_Block_Adminhtml_Siteblocks_Edit_Form extends Mage_Adminhtml_Block_Widget_Form { public function __construct() { parent::__construct(); $this->setId('block_form'); $this->setTitle(Mage::helper('siteblocks')->__('Block Information')); } protected function _prepareForm() { $model = Mage::registry('siteblocks_block'); $form = new Varien_Data_Form( array( 'id' => 'edit_form', 'action' => $this->getUrl('*/*/save',array('block_id'=>$this->getRequest()->getParam('block_id'))), 'method' => 'post', 'enctype' => 'multipart/form-data' ) ); $form->setHtmlIdPrefix('block_'); $fieldset = $form->addFieldset('base_fieldset', array( 'legend'=>Mage::helper('siteblocks')->__('General Information'), 'class' => 'fieldset-wide') ); if ($model->getBlockId()) { $fieldset->addField('block_id', 'hidden', array( 'name' => 'block_id', )); } $fieldset->addField('title', 'text', array( 'name' => 'title', 'label' => Mage::helper('siteblocks')->__('Block Title'), 'title' => Mage::helper('siteblocks')->__('Block Title'), 'required' => true, ));
ãããã®ã¢ã¯ã·ã§ã³ã®åŸãéå±ãªããã¹ããšãªã¢ã®ä»£ããã«ã䟿å©ãªãšãã£ã¿ãŒãã£ãŒã«ããåŸãããŸããæ§æããŒãžã®ãã£ãŒã«ãã«å¯ŸããŠåãããšãè¡ãããå Žåã¯ãåºæ¬çã«æšæºã®ãšãã£ã¿ãŒèŠçŽ ã®ã³ããŒã¢ã³ãããŒã¹ãã§ããæ°ããã¬ã³ãã©ãŒãäœæããå¿
èŠããããŸããlib / Varien / Data / Form / Element / Myeditor.php <?php class Varien_Data_Form_Element_Myeditor extends Varien_Data_Form_Element_Editor { public function __construct($attributes=array()) { parent::__construct($attributes);
system.xmlã¯æ¬¡ã®ããã«ãªããŸããã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ etc / system.xml <?xml version="1.0"?> <config> <tabs> <ign translate="label" module="siteblocks"> <label>IGN</label> <sort_order>2</sort_order> </ign> </tabs> <sections> <siteblocks module="siteblocks" translate="label"> <label>Siteblocks</label> <tab>ign</tab> <frontend>text</frontend> <sort_order>1</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> <groups> <settings module="siteblocks" translate="label"> <label>Settings</label> <expanded>1</expanded> <sort_order>1</sort_order> <show_in_default>1</show_in_default> <show_in_Website>1</show_in_Website> <show_in_store>1</show_in_store> <fields> <enabled translate="label comment" module="siteblocks"> <label>Enabled</label> <frontend_type>select</frontend_type> <source_model>siteblocks/source_status</source_model> <sort_order>1</sort_order> <show_in_default>1</show_in_default> <show_in_Website>1</show_in_Website> <show_in_store>1</show_in_store> <comment>Is module enabled</comment> </enabled> <blocks_count> <label>Blocks on page</label> <frontend_type>text</frontend_type> <sort_order>2</sort_order> <show_in_default>1</show_in_default> <show_in_Website>1</show_in_Website> <show_in_store>1</show_in_store> <depends><enabled>1</enabled></depends> </blocks_count> <raw_text> <label>Raw text</label> <frontend_type>myeditor</frontend_type> <sort_order>3</sort_order> <show_in_default>1</show_in_default> <show_in_Website>1</show_in_Website> <show_in_store>1</show_in_store> <depends><enabled>1</enabled></depends> </raw_text> <myimage> <label>Image</label> <frontend_type>myimage</frontend_type> <sort_order>3</sort_order> <show_in_default>1</show_in_default> <show_in_Website>1</show_in_Website> <show_in_store>1</show_in_store> <depends><enabled>1</enabled></depends> </myimage> </fields> </settings> </groups> </siteblocks> </sections> </config>
ãã®ã¢ãžã¥ãŒã«ã§ã¯ãããã¯å¿
é ãã£ãŒã«ãã§ã¯ãªããäŸãšããŠäœæãããŠããŸãããããããã®æ¹æ³ã§ã³ã³ãã³ããããã³ããšã³ãã«è¡šç€ºããŸããã¢ããª/ãã¶ã€ã³/ããã³ããšã³ã/ããŒã¹/ããã©ã«ã/ãã³ãã¬ãŒã/ãµã€ããããã¯/ list.phtml <?php foreach($this->getBlocks() as $block):?> <div class="siteblock"> <div class="block-title"><?php echo $block->getTitle()?></div> <div class="block-image"> <?php if($block->getImage()):?> <img src="<?php echo $block->getImageSrc()?>" height="150" width="auto" alt="<?php $block->getTitle()?>" title="<?php $block->getTitle()?>"> <?php endif;?> </div> <div class="block-content"><?php echo $this->getBlockContent($block)?></div> </div> <?php endforeach;?>
ãããã¯ã§ã¯ããã®ããã«æ°ããgetBlockContentã¡ãœãããäœæãããŸãããapp / local / IGN / Siteblocks / Block / List.php <?php class IGN_Siteblocks_Block_List extends Mage_Core_Block_Template { public function getBlocks() {

ã«ãŒã«æ¡ä»¶ã䜿çšãã
ãããªïŒMagentoã§ã«ãŒã«æ¡ä»¶ã䜿çšãã
ã¬ãã¹ã³ã§äœæããIGN_Siteblocks-12.zip ã¢ãžã¥ãŒã«ã®æ§é 次ã®ã¹ãããã¯ãã¢ãžã¥ãŒã«ã«æ¡ä»¶ã远å ããããšã§ããåãããšãMagentoããã¢ãŒã·ã§ã³ã«ãŒã«ã§ã䜿çšãããŠããŸãããããŠãããã§ã¯2çš®é¡ã®æ¡ä»¶ãçšæãããŠããŸããæåã¯ã2çªç®ã®ãã¹ã±ããã§è£œå屿§ã䜿çšãããŸãã以äžã®ã¬ã·ãã§ã¯æåã®ã±ãŒã¹ã«ã€ããŠèª¬æããŸãããéãã¯ããã€ãã®è¡ã®çœ®æã®ã¿ã§ãããªãæ¡ä»¶ãå¿
èŠãªã®ã§ããïŒãããã¯ã衚瀺ããå Žæãéžæããããã«ãæ¡ä»¶ã䜿çšããŸããããšãã°ãäŸ¡æ Œã100ãã«æªæºã®è£œåããŒãžããŸãã¯16 GBã®ã¡ã¢ãªãš2015幎ã®è£œé æ¥ãããç¹å®ã®ã«ããŽãªã®ãã¹ãŠã®é»è©±ãããã§ã¯ãŠãŒã¶ãŒã±ãŒã¹ã«ã€ããŠã¯èª¬æããŸãããäœæé åºïŒ1.ã¢ãžã¥ãŒã«ããŒãžã§ã³ãæŽæ°ããããŒãã«ã«æ°ããåã远å ãããããã«ã¢ããã°ã¬ãŒãã¹ã¯ãªããã远å ããŸããconditions_serializedãªã©TEXTãapp / code / local / IGN / Siteblocks / sql / siteblocks_setup / upgrade-1.0.1-1.0.2.php <?php $installer = $this; $installer->startSetup(); $installer->run(" ALTER TABLE `{$this->getTable('siteblocks/block')}` ADD `conditions_serialized` TEXT NOT NULL; "); $installer->endSetup();
2.ã¢ãã«ã¯Mage_Rule_Model_Abstractãç¶æ¿ããå¿
èŠããããŸãããããŠã2ã€ã®ã¡ãœããã宣èšããå¿
èŠããããŸãïŒgetConditionsInstanceãšgetActionInstanceã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ã¢ãã«/ Observer.php <?php class IGN_Siteblocks_Model_Block extends Mage_Rule_Model_Abstract { protected $_eventPrefix = 'siteblocks_block';
getConditionsInstanceã¡ãœãããžã®ãã¹ãŠã®æ³šæãããã§ãCatalog Price Rulesã®ãããªæ¡ä»¶ã䜿çšããŸãã補åã®ããããã£ãšå±æ§ã®ã¿ãã·ã§ããã³ã°ã«ãŒãäŸ¡æ Œã«ãŒã«ã®ãããªæ¡ä»¶ãå¿
èŠãªå Žåã¯ãMage :: getModelïŒ 'salesrule / rule_condition_combine'ïŒ;ã䜿çšããå¿
èŠããããŸãããã¹ã±ããå
ã®ããŒã¿ã«åºã¥ããŠãããã¯ããã€è¡šç€ºããããæ±ºå®ããå Žåã¯ãsalesruleã䜿çšããŸãããŸããç¬èªã®ã¢ãã«ãäœæãããã®äžã«ä»»æã®æ¡ä»¶ãå®è£
ã§ããŸãã3. ã³ã³ãããŒã©ãŒã§saveActionãæŽæ°ããå¿
èŠããããŸããã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ã³ã³ãããŒã©ãŒ/ Adminhtml / SiteblocksController.php <?php class IGN_Siteblocks_Adminhtml_SiteblocksController extends Mage_Adminhtml_Controller_Action { public function indexAction() { $this->loadLayout(); $this->_addContent($this->getLayout()->createBlock('siteblocks/adminhtml_siteblocks')); $this->renderLayout(); } public function newAction() { $this->_forward('edit'); } public function editAction() { $id = $this->getRequest()->getParam('block_id'); Mage::register('siteblocks_block',Mage::getModel('siteblocks/block')->load($id)); $blockObject = (array)Mage::getSingleton('adminhtml/session')->getBlockObject(true); if(count($blockObject)) { Mage::registry('siteblocks_block')->setData($blockObject); } $this->loadLayout(); $this->_addContent($this->getLayout()->createBlock('siteblocks/adminhtml_siteblocks_edit')); $this->renderLayout(); } protected function _uploadFile($fieldName,$model) { if( ! isset($_FILES[$fieldName])) { return false; } $file = $_FILES[$fieldName]; if(isset($file['name']) && (file_exists($file['tmp_name']))){ if($model->getId()){ unlink(Mage::getBaseDir('media').DS.$model->getData($fieldName)); } try { $path = Mage::getBaseDir('media') . DS . 'siteblocks' . DS; $uploader = new Varien_File_Uploader($file); $uploader->setAllowedExtensions(array('jpg','png','gif','jpeg')); $uploader->setAllowRenameFiles(true); $uploader->setFilesDispersion(false); $uploader->save($path, $file['name']); $model->setData($fieldName,$uploader->getUploadedFileName()); return true; } catch(Exception $e) { return false; } } } public function saveAction() { try { $id = $this->getRequest()->getParam('block_id'); $block = Mage::getModel('siteblocks/block')->load($id);
4.管çè
ã¬ã€ã¢ãŠããæŽæ°ããŸããã¢ããª/ã³ãŒã/ãã¶ã€ã³/ adminhtml /ããã©ã«ã/ããã©ã«ã/ã¬ã€ã¢ãŠã/ siteblocks.xml <?xml version="1.0"?> <layout version="1.0.0"> <adminhtml_siteblocks_edit> <update handle="editor"/> <reference name="head"> <action method="setCanLoadExtJs"><flag>1</flag></action> <action method="setCanLoadRulesJs"><flag>1</flag></action> </reference> </adminhtml_siteblocks_edit> <adminhtml_system_config_edit> <update handle="editor"/> </adminhtml_system_config_edit> </layout>
5.ãã©ãŒã ã®ç®¡çãã¡ã€ã«ãç·šéããŸããããã§ãæ¡ä»¶ãã¶ã€ããŒã远å ããŸããã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ãããã¯/ Adminhtml /ãµã€ããããã¯/ç·šé/ Form.php <?php class IGN_Siteblocks_Block_Adminhtml_Siteblocks_Edit_Form extends Mage_Adminhtml_Block_Widget_Form { public function __construct() { parent::__construct(); $this->setId('block_form'); $this->setTitle(Mage::helper('siteblocks')->__('Block Information')); } protected function _prepareForm() { $model = Mage::registry('siteblocks_block'); $form = new Varien_Data_Form( array( 'id' => 'edit_form', 'action' => $this->getUrl('*/*/save',array('block_id'=>$this->getRequest()->getParam('block_id'))), 'method' => 'post', 'enctype' => 'multipart/form-data' ) ); $form->setHtmlIdPrefix('block_'); $fieldset = $form->addFieldset('base_fieldset', array( 'legend'=>Mage::helper('siteblocks')->__('General Information'), 'class' => 'fieldset-wide') ); if ($model->getBlockId()) { $fieldset->addField('block_id', 'hidden', array( 'name' => 'block_id', )); } $fieldset->addField('title', 'text', array( 'name' => 'title', 'label' => Mage::helper('siteblocks')->__('Block Title'), 'title' => Mage::helper('siteblocks')->__('Block Title'), 'required' => true, ));
次ã®è¡ã«æ³šæããŠãã ããã $this->getUrl('*/promo_catalog/newConditionHtml/form/block_conditions_fieldset')
ã·ã§ããã³ã°ã«ãŒãäŸ¡æ Œã«ãŒã«ã䜿çšããå ŽåïŒ $this->getUrl('*/promo_quote/newConditionHtml/form/block_conditions_fieldset')
å¥ã®éèŠãªãã€ã³ããæ¢ããŸããblock_conditions_fieldset -ã©ãblock_äžèŽããŠããå¿
èŠããããŸã$ form-> setHtmlIdPrefixïŒ 'block_' ïŒ;ãããŠãããã¯ç®¡çè
åŽã®ãã¹ãŠã§ããããã§ãããã³ããšã³ãã®æ¡ä»¶ã®æ€èšŒã远å ããŸãããã®ããã«ãList.phpãããã¯ãç·šéããŸãã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ãããã¯/List.php <?php class IGN_Siteblocks_Block_List extends Mage_Core_Block_Template { public function getBlocks() {
ããªããŒã¿ã®äœ¿çšã¯éåžžã«ç°¡åã§ãããã®ã±ãŒã¹ã§ã¯ããããã¯ã®åºåãã¯ãªãŒãã£ãŒããŒãžã§çºçããããã®å Žåã«æ€èšŒãããã®ããªãå Žåãæ¡ä»¶ãç¡èŠããŸãã
ç·šéããŒãžã§ã¿ãã䜿çšãã
ãããªïŒMagentoã®ç·šéããŒãžã§ã¿ãã䜿çšãã
ã¬ãã¹ã³ã§äœæãããIGN_Siteblocks-13.zipã¢ãžã¥ãŒã«ã®æ§é ãå€ãã®ãã£ãŒã«ããããå Žåãã¿ãã¯äŸ¿å©ã§äŸ¿å©ã§ãããã£ãŒã«ããã°ã«ãŒãã«åå²ããåã°ã«ãŒããç¬èªã®ã¿ããäœæããŸããã¿ãã远å ããã«ã¯ããã€ãã®ãªãã·ã§ã³ããããŸãããŸããã¿ãã¯ã©ã¹ãäœæãããã®åºåãç·šéããŒãžã«è¿œå ããå¿
èŠããããŸããã¯ã©ã¹èªäœã¯æ¬¡ã®ããã«ãªããŸããã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ãããã¯/ Adminhtml /ãµã€ããããã¯/ç·šé/ Tabs.php <?php class IGN_Siteblocks_Block_Adminhtml_Siteblocks_Edit_Tabs extends Mage_Adminhtml_Block_Widget_Tabs { public function __construct() { parent::__construct(); $this->setId('block_tabs'); $this->setDestElementId('edit_form'); $this->setTitle(Mage::helper('siteblocks')->__('Block Information')); }
addTabã¡ãœããã®å®è£
ãèŠãŠãã ãããé
åããªããžã§ã¯ããæååããã£ãŒãã§ããããšãããããŸãããããŠãããã€ãã®éãããããŸããããã§ã¯ããããªãèŠãŠããããæç¢ºã«ç€ºãããšããå§ãããŸããããããããã§äžèšèšããŸããã¡ãœããã«æååãæž¡ãå Žåãã¿ãã¯ã©ã¹ã¯Mage_Adminhtml_Block_Widget_Tab_Interfaceã€ã³ã¿ãŒãã§ã€ã¹ãå®è£
ããå¿
èŠããããŸããããããªããšããšã©ãŒãçºçããŸãããŸããã€ã³ã¿ãŒãã§ãŒã¹ã«ã¯4ã€ã®ã¡ãœããã®å®è£
ãå¿
èŠã§ãããããã£ãŠããã®äŸã§ã¯ããã¢çšã«2ã€ã®ãªãã·ã§ã³ã䜿çšããŸããå®éã«ã¯ãåãæ¹æ³ã§ã¿ãã远å ããããšããå§ãããŸãããœãŒã¹ãã¡ã€ã«Form.phpããã³ããŒããã¿ãã®å
容ãèŠãŠã¿ãŸãããã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ãããã¯/ Adminhtml /ãµã€ããããã¯/ç·šé/ã¿ã/ Main.php <?php class IGN_Siteblocks_Block_Adminhtml_Siteblocks_Edit_Tab_Main extends Mage_Adminhtml_Block_Widget_Form { public function __construct() { parent::__construct(); $this->setId('main_form'); $this->setTitle(Mage::helper('siteblocks')->__('Block Information')); } protected function _prepareForm() { $model = Mage::registry('siteblocks_block'); $form = new Varien_Data_Form(); $form->setHtmlIdPrefix('main_'); $fieldset = $form->addFieldset('base_fieldset', array( 'legend'=>Mage::helper('siteblocks')->__('General Information'), 'class' => 'fieldset-wide') ); if ($model->getBlockId()) { $fieldset->addField('block_id', 'hidden', array( 'name' => 'block_id', )); } $fieldset->addField('title', 'text', array( 'name' => 'title', 'label' => Mage::helper('siteblocks')->__('Block Title'), 'title' => Mage::helper('siteblocks')->__('Block Title'), 'required' => true, ));
ã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ãããã¯/ Adminhtml /ãµã€ããããã¯/ç·šé/ã¿ã/ Conditions.php <?php class IGN_Siteblocks_Block_Adminhtml_Siteblocks_Edit_Tab_Conditions extends Mage_Adminhtml_Block_Widget_Form implements Mage_Adminhtml_Block_Widget_Tab_Interface {
å
ã®Form.phpãã¡ã€ã«ãã³ããŒããŸãããåé¢ããããã©ãŒã èŠçŽ ããã©ã°ãåé€ããããšãå¿ããªãã§ãã ãã$ form-> setUseContainerïŒtrueïŒ; ã
ãããã£ãŠããã©ãŒã ã®ãœãŒã¹ãã¡ã€ã«ãããã£ãŒã«ããåé€ã§ããŸããã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ãããã¯/ Adminhtml /ãµã€ããããã¯/ç·šé/ Form.php <?php class IGN_Siteblocks_Block_Adminhtml_Siteblocks_Edit_Form extends Mage_Adminhtml_Block_Widget_Form { public function __construct() { parent::__construct(); $this->setId('block_form'); $this->setTitle(Mage::helper('siteblocks')->__('Block Information')); } protected function _prepareForm() { $model = Mage::registry('siteblocks_block'); $form = new Varien_Data_Form( array( 'id' => 'edit_form', 'action' => $this->getUrl('*/*/save',array('block_id'=>$this->getRequest()->getParam('block_id'))), 'method' => 'post', 'enctype' => 'multipart/form-data' ) ); $form->setHtmlIdPrefix('block_'); $form->setValues($model->getData()); $form->setUseContainer(true); $this->setForm($form); return parent::_prepareForm(); } protected function _prepareLayout() { parent::_prepareLayout(); if (Mage::getSingleton('cms/wysiwyg_config')->isEnabled()) { $this->getLayout()->getBlock('head')->setCanLoadTinyMce(true); } } }
ã¿ããããã¯ã®åºåãæç»ããæ¹æ³ãã³ã³ãããŒã©ãŒã®ã¡ãœããçªå·1ïŒã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ã³ã³ãããŒã©ãŒ/ Adminhtml / SiteblocksController.php <?php class IGN_Siteblocks_Adminhtml_SiteblocksController extends Mage_Adminhtml_Controller_Action { public function indexAction() { $this->loadLayout(); $this->_addContent($this->getLayout()->createBlock('siteblocks/adminhtml_siteblocks')); $this->renderLayout(); } public function newAction() { $this->_forward('edit'); } public function editAction() { $id = $this->getRequest()->getParam('block_id'); Mage::register('siteblocks_block',Mage::getModel('siteblocks/block')->load($id)); $blockObject = (array)Mage::getSingleton('adminhtml/session')->getBlockObject(true); if(count($blockObject)) { Mage::registry('siteblocks_block')->setData($blockObject); } $this->loadLayout();
ãããããã®ãã³ãã£ãŒãæŸæ£ããã¬ã€ã¢ãŠãã§ã¡ãœããçªå·2ã䜿çšããŸããapp / design / adminhtml / default / default / layout / siteblocks.xml <?xml version="1.0"?> <layout version="1.0.0"> <adminhtml_siteblocks_edit> <update handle="editor"/> <reference name="head"> <action method="setCanLoadExtJs"><flag>1</flag></action> <action method="setCanLoadRulesJs"><flag>1</flag></action> </reference> <reference name="left"> <block type="siteblocks/adminhtml_siteblocks_edit_tabs" name="siteblocks_tabs"> <block name="conditions_tab" type="siteblocks/adminhtml_siteblocks_edit_tab_conditions"/> <action method="addTab"><name>my_conditions</name><block>conditions_tab</block></action> <action method="addTab"><name>my_conditions</name><block>siteblocks/adminhtml_siteblocks_edit_tab_conditions</block></action> </block> </reference> </adminhtml_siteblocks_edit> <adminhtml_system_config_edit> <update handle="editor"/> </adminhtml_system_config_edit> </layout>
æåŸã«ãã¢ããã€ã¹ã®1ã€ãšããŠãããã«2ãæã«ã¿ãã远å ããªãã§ãã ããã1ã€ã¯ã¬ã€ã¢ãŠãã«ããã1ã€ã¯ãããã¯ã«ãããŸããã¬ã€ã¢ãŠãå
ã®1ã€ã®å Žæããã¹ãŠããŸãã¯ãããã¯å
ã®ãã¹ãŠã远å ããŸãã
ç·šéããŒãžããã³ããã³ããšã³ãã§ã®ååã®åºåããŒãã«ïŒã°ãªããïŒã
ãããªïŒMagentoã®ç·šéããŒãžã§ã¿ãã䜿çšãã
ã¬ãã¹ã³ã§äœæãããIGN_Siteblocks-14.zip ã¢ãžã¥ãŒã«ã®æ§é ããã§ãã¢ãžã¥ãŒã«ã«æçµæ©èœã远å ããŸã-ãããã¯ãšãšãã«ããã³ããšã³ãã«è¡šç€ºããã補åãããŒã¯ããæ©èœã代æ¿ã®é¢é£è£œåã®äžçš®ããããã¯ã«é©ããæ¡ä»¶ãåããååã®ããŒãžã«ãããã¹ããšååãå«ããããã¯ãåºåããéåžžã«æçšãªæçšãªäºäŸãé ã®äžã«åœ¢æãããŠããŸããæ°ããã¿ãã远å ããŸããã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ãããã¯/ Adminhtml /ãµã€ããããã¯/ç·šé/ Tabs.php <?php class IGN_Siteblocks_Block_Adminhtml_Siteblocks_Edit_Tabs extends Mage_Adminhtml_Block_Widget_Tabs { public function __construct() { parent::__construct(); $this->setId('block_tabs'); $this->setDestElementId('edit_form'); $this->setTitle(Mage::helper('siteblocks')->__('Block Information')); } protected function _prepareLayout() { $this->addTab('main_tab',array( 'label' => $this->__('Main'), 'title' => $this->__('Main'), 'content' => $this->getLayout()->createBlock('siteblocks/adminhtml_siteblocks_edit_tab_main')->toHtml() )); $this->addTab('conditions_tab',array( 'label' => $this->__('Conditions'), 'title' => $this->__('Conditions'), 'content' => $this->getLayout()->createBlock('siteblocks/adminhtml_siteblocks_edit_tab_conditions')->toHtml() ));
ã¿ãã¯AJAXã䜿çšããŸããããã¯ã³ãŒãã§èŠãããšãã§ããŸãããªã¯ãšã¹ãçšã®URLããããŸããã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ãããã¯/ Adminhtml /ãµã€ããããã¯/ç·šé/ã¿ã/ Products.php <?php class IGN_Siteblocks_Block_Adminhtml_Siteblocks_Edit_Tab_Products extends Mage_Adminhtml_Block_Widget_Form implements Mage_Adminhtml_Block_Widget_Tab_Interface { public function getTabTitle() { return $this->__('Products'); } public function getTabLabel() { return $this->__('Products'); } public function canShowTab() { return true; } public function isHidden() { return false; } public function getClass() { return 'ajax'; } public function getTabClass() { return 'ajax'; }
ãªããªã
ã¿ãã¯AJAXã䜿çšããŠãããããã³ã³ãããŒã©ãŒã«ã¢ã¯ã·ã§ã³ã远å ããå¿
èŠããããŸãããããŠãå
ãèŠããšãsaveActionã«ã©ã®ããžãã¯ã远å ãããããããããããŒã¯ããã補åãä¿åãããŸããã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ã³ã³ãããŒã©ãŒ/ Adminhtml / SiteblocksController.php <?php class IGN_Siteblocks_Adminhtml_SiteblocksController extends Mage_Adminhtml_Controller_Action { public function indexAction() { $this->loadLayout(); $this->_addContent($this->getLayout()->createBlock('siteblocks/adminhtml_siteblocks')); $this->renderLayout(); } public function newAction() { $this->_forward('edit'); } public function editAction() { $id = $this->getRequest()->getParam('block_id'); Mage::register('siteblocks_block',Mage::getModel('siteblocks/block')->load($id)); $blockObject = (array)Mage::getSingleton('adminhtml/session')->getBlockObject(true); if(count($blockObject)) { Mage::registry('siteblocks_block')->setData($blockObject); } $this->loadLayout();
ã³ã³ãããŒã©ãŒã®ã³ãŒããããã¬ã€ã¢ãŠããæŽæ°ããå¿
èŠãããããšã¯æããã§ããapp / design / adminhtml / default / default / layout / adminhtml.xml <?xml version="1.0"?> <layout version="1.0.0"> <adminhtml_siteblocks_edit> <update handle="editor"/> <reference name="head"> <action method="setCanLoadExtJs"><flag>1</flag></action> <action method="setCanLoadRulesJs"><flag>1</flag></action> </reference> <reference name="left"> <block type="siteblocks/adminhtml_siteblocks_edit_tabs" name="siteblocks_tabs"> </block> </reference> </adminhtml_siteblocks_edit> <adminhtml_system_config_edit> <update handle="editor"/> </adminhtml_system_config_edit> <adminhtml_siteblocks_products> <block type="core/text_list" name="root" output="toHtml"> <block type="siteblocks/adminhtml_siteblocks_edit_tab_products_grid" name="siteblocks_products"/> <block type="adminhtml/widget_grid_serializer" name="siteblocks_products_serializer"> <reference name="siteblocks_products_serializer"> <action method="initSerializerBlock"> <grid_block_name>siteblocks_products</grid_block_name> <data_callback>getSelectedBlockProducts</data_callback> <hidden_input_name>links[products]</hidden_input_name> <reload_param_name>siteblocks_products</reload_param_name> </action> <action method="addColumnInputName"> <input_name>position</input_name> </action> </reference> </block> </block> </adminhtml_siteblocks_products> <adminhtml_siteblocks_productsgrid> <block type="core/text_list" name="root" output="toHtml"> <block type="siteblocks/adminhtml_siteblocks_edit_tab_products_grid" name="block_products"/> </block> </adminhtml_siteblocks_productsgrid> </layout>
é©åãªãããã¯ã®åœåã«æ³šæããŠãã ããããããžã§ã¯ãã®ååã倿ŽããŸãããã¹ãŠã®å Žæã§åæçã«ååã倿ŽããŸãã管çã€ã³ã¿ãŒãã§ã€ã¹ã®æåŸã®èŠçŽ ã¯ãããŒãã«ã¯ã©ã¹ã«ãªããŸããã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ãããã¯/ Adminhtml /ãµã€ããããã¯/ç·šé/ã¿ã/補å/ Grid.php <?php class IGN_Siteblocks_Block_Adminhtml_Siteblocks_Edit_Tab_Products_Grid extends Mage_Adminhtml_Block_Widget_Grid { protected $_block; public function __construct() { parent::__construct(); $this->setId('siteblocks_product_grid'); $this->setDefaultSort('entity_id'); $this->setUseAjax(true); if ($this->_getBlock()->getId()) { $this->setDefaultFilter(array('in_products'=>1)); } if ($this->isReadonly()) { $this->setFilterVisibility(false); } } protected function _getBlock() { if(!$this->_block) { $this->_block = Mage::getModel('siteblocks/block')->load($this->getRequest()->getParam('block_id')); } return $this->_block; } protected function _addColumnFilterToCollection($column) {
補åãæ£åžžã«ä¿åããã«ã¯ãããŒãžã§ã³ãæŽæ°ããæ°ããã¢ããã°ã¬ãŒãã¹ã¯ãªãããäœæããŠãæ°ããåã远å ããå¿
èŠããããŸããapp / code / local / IGN / Siteblocks / sql / siteblocks_setup / upgrade-1.0.2-1.0.3.php <?php $installer = $this; $installer->startSetup(); $installer->run(" ALTER TABLE `{$this->getTable('siteblocks/block')}` ADD `products` TEXT NOT NULL; "); $installer->endSetup();
ã¢ãã«ã®å°ããªå€æãã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ã¢ãã«/ Block.php <?php class IGN_Siteblocks_Model_Block extends Mage_Rule_Model_Abstract { protected $_eventPrefix = 'siteblocks_block'; public function getActionsInstance() { return Mage::getModel('catalogrule/rule_action_collection'); } public function getConditionsInstance() { return Mage::getModel('catalogrule/rule_condition_combine'); } public function _construct() { parent::_construct(); $this->_init('siteblocks/block'); } public function getImageSrc() { return Mage::getBaseUrl('media') . 'siteblocks' . DS . $this->getImage(); }
ååãå²ãåœãŠãããšãã§ããŸããããã§ãããããããã³ããšã³ãã§æ£ãã衚瀺ããå¿
èŠããããŸãããããã®ç®çã®ããã«ãã¢ããã»ã«ããã³ããŒããããŒãºã«åãããŠç·šéããæ°ãããã³ãã¬ãŒããäœæããŸãããã¢ããª/ãã¶ã€ã³/ããã³ããšã³ã/ããŒã¹/ããã©ã«ã/ãã³ãã¬ãŒã/ãµã€ããããã¯/補å/ list.php <?php if(count($this->getLoadedProductCollection()->getItems())): ?> <div class="box-collateral box-up-sell"> <h2><?php echo $this->__('You may also like') ?></h2> <ul class="products-grid products-grid--max-4-col" id="upsell-product-table"> <?php foreach ($this->getLoadedProductCollection()->getItems() as $_link): ?> <li> <a href="<?php echo $_link->getProductUrl() ?>" title="<?php echo $this->escapeHtml($_link->getName()) ?>" class="product-image"> <img src="<?php echo $this->helper('catalog/image')->init($_link, 'small_image')->resize(280) ?>" alt="<?php echo $this->escapeHtml($_link->getName()) ?>" /> </a> <h3 class="product-name"><a href="<?php echo $_link->getProductUrl() ?>" title="<?php echo $this->escapeHtml($_link->getName()) ?>"><?php echo $this->escapeHtml($_link->getName()) ?></a></h3> <?php echo $this->getPriceHtml($_link, true, '-upsell') ?> </li> <?php endforeach; ?> </ul> </div> <?php endif ?>
list.phtmlãããã¯åºåãã³ãã¬ãŒããæŽæ°ããŸããã¢ããª/ãã¶ã€ã³/ããã³ããšã³ã/ããŒã¹/ããã©ã«ã/ãã³ãã¬ãŒã/ãµã€ããããã¯/ list.php <?php foreach($this->getBlocks() as $block):?> <div class="siteblock"> <div class="block-title"><?php echo $block->getTitle()?></div> <div class="block-image"> <?php if($block->getImage()):?> <img src="<?php echo $block->getImageSrc()?>" height="150" width="auto" alt="<?php $block->getTitle()?>" title="<?php $block->getTitle()?>"> <?php endif;?> </div> <div class="block-content"><?php echo $this->getBlockContent($block)?></div> <div class="block-product-list"> <?php echo $this->getProductsList($block)?> </div> </div> <?php endforeach;?>
ãããŠãList.phpãããã¯ã«å¿
èŠãªå€æŽïŒã¢ããª/ã³ãŒã/ããŒã«ã«/ IGN /ãµã€ããããã¯/ãããã¯/List.php <?php class IGN_Siteblocks_Block_List extends Mage_Core_Block_Template { public function getBlocks() {
ååçšã«ç¬èªã®ãããã¯ãäœæããããšãã§ããŸãããã¿ã¹ã¯ã«ã¯æšæºã®ãããã¯ã䜿çšã§ããŸãããããã£ãŠããµã€ãã®ããã€ãã®å Žæã§ãããã¯ã衚瀺ã§ããã¢ãžã¥ãŒã«ãååŸããŸããã補åããŒãžã®ãããã¯ã®åºåã¯ãæ¡ä»¶ã®ãã§ãã¯ïŒã«ãŒã«æ¡ä»¶ïŒã§å®è¡ãããŸãã䟿å©ãªWYSIWYGãšãã£ã¿ãŒã䜿çšããŠã³ã³ãã³ããå
¥åããŸãããŸãããããã¯ãšãšãã«ãããã€ãã®è£œåã衚瀺ã§ããŸããããã€ãã®å€æŽãå ããã°ãå®éã®äœ¿çšãç°¡åã«èŠã€ããããšãã§ããã¢ãžã¥ãŒã«ãäœæãããã¢ãžã¥ãŒã«ãå«ãå
¬éãªããžããªããããŠããã®ã¬ã€ãã¯ãç¬èªã®æ¯æãæ¹æ³ãšé
éæ¹æ³ãäœæããããã»ã¹ãèæ
®ããªããã°å®å
šã§ã¯ãããŸããã
æ¯ææ¹æ³ã¢ãžã¥ãŒã«ã®äœæ
ãããªïŒMagentoã®æ¯æãæ¹æ³ã¢ãžã¥ãŒã«ã®éçº
ãããªãã¯ãªããžããªïŒbitbucket.org/dvman8bit/ign_paymentããã¯ãç§å¯ã³ãŒããå
¥åããŠæ³šæã®æ¯æããè¡ãããšãã§ããæ¯æãæ¹æ³ã«ãªããŸãããããæ³šæã«å¯ŸããŠæ¯æãããã€ãã®è©³çްã®å
¥åã§ãããšæ³åããŠã¿ãŸããããããŒããéçºããæ¬æ Œçãªãã©ãŒã ã«ããããšãã§ããŸããç§ãã¡ã®ä»äºã¯ãæå°éã®è¡åãçè§£ããŠãå°æ¥ã®æ¬æ Œçãªæ¯æãæ¹æ³ã®åºç€ãäœãããšã§ããæ¯æãæ¹æ³ã«ã¯ã2ã€ã®ãããã¯ã2ã€ã®ãã³ãã¬ãŒãã2ã€ã®xmlãã¡ã€ã«ã1ã€ã®ã¢ãã«ã®ãã¡ã€ã«ãå«ãŸããŸããsystem.xmlããå§ããŸããããæ¢åã®[æ¯æãæ¹æ³]ã¿ãã«æ°ããã»ã¯ã·ã§ã³ã远å ããŸããã¢ããª/ã³ãŒã/ã³ãã¥ããã£/ IGN /æ¯æã/ etc / system.xml <?xml version="1.0"?> <config> <sections> <payment> <groups> <ignpayment translate="label"> <label>IGN Payment</label> <frontend_type>text</frontend_type> <sort_order>30</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> <fields> <active translate="label"> <label>Enabled</label> <frontend_type>select</frontend_type> <source_model>adminhtml/system_config_source_yesno</source_model> <sort_order>1</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </active> <order_status translate="label"> <label>New Order Status</label> <frontend_type>select</frontend_type> <source_model>adminhtml/system_config_source_order_status_newprocessing</source_model> <sort_order>2</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </order_status> <payment_action translate="label"> <label>Automatically Invoice All Items</label> <frontend_type>select</frontend_type> <source_model>payment/source_invoice</source_model> <sort_order>3</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> <depends> <order_status separator=",">processing,processed_ogone</order_status> </depends> </payment_action> <sort_order translate="label"> <label>Sort Order</label> <frontend_type>text</frontend_type> <sort_order>100</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> <frontend_class>validate-number</frontend_class> </sort_order> <title translate="label"> <label>Title</label> <frontend_type>text</frontend_type> <sort_order>1</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> </title> <allowspecific translate="label"> <label>Payment from Applicable Countries</label> <frontend_type>allowspecific</frontend_type> <sort_order>50</sort_order> <source_model>adminhtml/system_config_source_payment_allspecificcountries</source_model> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </allowspecific> <specificcountry translate="label"> <label>Payment from Specific Countries</label> <frontend_type>multiselect</frontend_type> <sort_order>51</sort_order> <source_model>adminhtml/system_config_source_country</source_model> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> <can_be_empty>1</can_be_empty> </specificcountry> <min_order_total translate="label"> <label>Minimum Order Total</label> <frontend_type>text</frontend_type> <sort_order>98</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </min_order_total> <max_order_total translate="label"> <label>Maximum Order Total</label> <frontend_type>text</frontend_type> <sort_order>99</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </max_order_total> <secret_code translate="label"> <label>Secret Code</label> <frontend_type>text</frontend_type> <sort_order>99</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </secret_code> </fields> </ignpayment> </groups> </payment> </sections> </config>
system.xmlã§ã¯ãã»ãšãã©ãã¹ãŠã®ãã£ãŒã«ããæšæºã§ããã·ãŒã¯ã¬ããã³ãŒããå
¥åããæ°ãããã£ãŒã«ãã1ã€ã ã远å ããŸãããã¢ããª/ã³ãŒã/ã³ãã¥ããã£/ IGN /æ¯æã/ etc / config.xml <?xml version="1.0"?> <config> <modules> <IGN_Payment> <version>1.0.0</version> </IGN_Payment> </modules> <global> <models> <ignpayment> <class>IGN_Payment_Model</class> </ignpayment> </models> <resources> <payment_setup> <setup> <module>IGN_Payment</module> </setup> </payment_setup> </resources> <blocks> <ignpayment> <class>IGN_Payment_Block</class> </ignpayment> </blocks> <helpers> <ignpayment> <class>IGN_Payment_Helper</class> </ignpayment> </helpers> </global> <frontend> <translate> <modules> <IGN_Payment> <files> <default>IGN_Payment.csv</default> </files> </IGN_Payment> </modules> </translate> </frontend> <adminhtml> <translate> <modules> <IGN_Payment> <files> <default>IGN_Payment.csv</default> </files> </IGN_Payment> </modules> </translate> </adminhtml> <default> <payment> <ignpayment> <active>1</active> <model>ignpayment/method</model> <order_status>pending</order_status> <title>Secret Code</title> <allowspecific>0</allowspecific> <sort_order>1</sort_order> <group>offline</group> </ignpayment> </payment> </default> </config>
ããã§ã¯ãæãéèŠãªéšåã§ããMethod.phpã¢ãã«ã«ç§»ããŸããããã¢ããª/ã³ãŒã/ã³ãã¥ããã£/ IGN /æ¯æã/ã¢ãã«/ Method.php <?php class IGN_Payment_Model_Method extends Mage_Payment_Model_Method_Abstract {
å¿
ãMage_Payment_Model_Method_Abstractã¯ã©ã¹ããç¶æ¿ããŠãã ããããã®ã¯ã©ã¹ã®å
éšãèŠããšãããã©ã«ãå€ãšã¡ãœãããåãã倿°ã®ããããã£ã衚瀺ãããŸããããããã£ãšã¡ãœããã«ã¯éåžžã«ããããããååãä»ããŠãããããäœããç¹ã«éèŠãªå Žåã¯ãã¯ã©ã¹ã«ã³ããŒããŠããŒãºã«å¯Ÿå¿ããå€ã瀺ããŸããã¢ãã«ã¯ã¡ãœããïŒorderïŒïŒãcaptureïŒïŒãvoidïŒïŒãrefundïŒïŒãªã©ïŒãå®è£
ããããšãèŠããŠããŸãããããŠãæ¯æãæ¹æ³ãæ¯æããµãŒãã¹ã®ãµãŒããŒãšãéä¿¡ãããå¿
èŠãããå Žåãã¡ãœãããã¯ã©ã¹ã«ã³ããŒããé©åãªã¹ã¯ãªããããããã«è¿œå ããŸããããã§ãããã³ããšã³ãéšåã§ã®ã¡ãœããã®çµè«ãåŠçããŸãããããŠãããã§2ã€ã®ã¯ã©ã¹ãäœæããŸããForm.phpã¯ããã§ãã¯ã¢ãŠããããã¯ã«æ¯æãæ¹æ³ã衚瀺ããããã«äœ¿çšãããŸããã¢ããª/ã³ãŒã/ã³ãã¥ããã£/ IGN /æ¯æã/ãããã¯/ Form.php <?php class IGN_Payment_Block_Form extends Mage_Payment_Block_Form { public function _construct() { parent::_construct();
ãã®ãããã¯ã¯ã泚æããŒãžã®æ
å ±ãããã¯ã«è¡šç€ºãããŸããã¢ããª/ã³ãŒã/ã³ãã¥ããã£/ IGN /æ¯æã/ãããã¯/ Info.php <?php class IGN_Payment_Block_Info extends Mage_Payment_Block_Info { protected function _construct() { parent::_construct(); $this->setTemplate('ignpayment/info.phtml'); } }
ãããŠããããã¯ã«å¯Ÿå¿ãããã³ãã¬ãŒãïŒã¢ããª/ãã¶ã€ã³/ããã³ããšã³ã/ããŒã¹/ããã©ã«ã/ãã³ãã¬ãŒã/ ignpayment / form.phtml <!-- id, payment_form_, - --> <div id="payment_form_ignpayment" style="display: none"> <input type="text" name="secret_code" autocomplete="off"> <!-- --> </div>
info.phtmlãã¡ã€ã«ã®å
å®¹ã¯æšæºã§ãããããŒãºã«åãããŠå€æŽã§ããŸããã¢ããª/ãã¶ã€ã³/ããã³ããšã³ã/ããŒã¹/ããã©ã«ã/ãã³ãã¬ãŒã/ ignpayment / info.phtml <p><strong><?php echo $this->escapeHtml($this->getMethod()->getTitle()) ?></strong></p> <?php if ($_specificInfo = $this->getSpecificInformation()):?> <table> <tbody> <?php foreach ($_specificInfo as $_label => $_value):?> <tr> <th><strong><?php echo $this->escapeHtml($_label)?>:</strong></th> </tr> <tr> <td><?php echo nl2br(implode($this->getValueAsArray($_value, true), "\n"))?></td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif;?> <?php echo $this->getChildHtml()?>
ãããæ¯æãæ¹æ³ã®åºæ¬ã§ãããããªãç·šéã¯ãç¹å®ã®æ¯æããµãŒãã¹ã®äœæ¥ã«åŒ·ãäŸåããŸããæ±ºæžãµãŒãã¹ããããã¯ãããŠååŒã®è©³çŽ°ãæž¡ãã³ã³ãããŒã©ãŒãå¿
èŠã«ãªãå ŽåããããŸãããŸããã³ã³ãããŒã©ãŒã®äœæãšããã«ããŒã®äœæã«ã€ããŠã¯äžèšã§èª¬æããŸããããããã§ã¯çç¥ããŸããã
é
éæ¹æ³ã¢ãžã¥ãŒã«
ãããªïŒMagentoã®é
éæ¹æ³ã®éçº
å
¬éãªããžããªïŒbitbucket.org/dvman8bit/ign_shipmentç¬èªã®é
ä¿¡æ¹æ³ãäœæããããã«å¿
èŠãªã¢ã¯ã·ã§ã³ãèŠãŠã¿ãŸããããã¢ãžã¥ãŒã«ã¯Belposhtaã§åäœããŸãããªããªã
ç§èªèº«ã¯ãã©ã«ãŒã·åºèº«ã§ãããã¯ç§ã«ãšã£ãŠéåžžã«éèŠã§ããBelposhtaã«ã¯ãããªãã¯APIã¯ãããŸããããŸãããã£ããã£ã¯ãããŸããã®ã§ãäŸ¡æ Œãå°ããã®ã¯ç°¡åã§ããé
ä¿¡æ¹æ³ã«ã¯ãå°ãªããšã3ã€ã®ãã¡ã€ã«ãå¿
èŠã§ãã2ã€ã®xmlãš1ã€ã®ã¢ãã«ããã«ããŒãåŒãç¶ã䜿çšããŸããåèš4ãã¢ããª/ã³ãŒã/ã³ãã¥ããã£/ IGN /åºè·/ etc / config.xml <?xml version="1.0"?> <config> <modules> <IGN_Shipment> <version>1.0.0</version> </IGN_Shipment> </modules> <global> <models> <ignshipment> <class>IGN_Shipment_Model</class> </ignshipment> </models> <helpers> <ignshipment> <class>IGN_Shipment_Helper</class> </ignshipment> </helpers> </global> <adminhtml> <translate> <modules> <IGN_Shipment> <files> <default>IGN_Shipment.csv</default> </files> </IGN_Shipment> </modules> </translate> </adminhtml> <frontend> <translate> <modules> <IGN_Shipment> <files> <default>IGN_Shipment.csv</default> </files> </IGN_Shipment> </modules> </translate> </frontend> <default> <carriers> <ignshipment> <active>1</active> <sallowspecific>0</sallowspecific> <model>ignshipment/carrier</model> <name>IGN Shipment</name> <price>5.00</price> <title>IGN Shipment</title> <type>I</type> <specificerrmsg>This shipping method is currently unavailable. If you would like to ship using this shipping method, please contact us.</specificerrmsg> <handling_type>F</handling_type> <packet_max_weight>2000</packet_max_weight> </ignshipment> </carriers> </default> </config>
ã¢ããª/ã³ãŒã/ã³ãã¥ããã£/ IGN /åºè·/ etc / system.xml <?xml version="1.0"?> <config> <sections> <carriers> <groups> <ignshipment translate="label"> <label>IGN Shipping</label> <frontend_type>text</frontend_type> <sort_order>2</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> <fields> <active translate="label"> <label>Enabled</label> <frontend_type>select</frontend_type> <source_model>adminhtml/system_config_source_yesno</source_model> <sort_order>1</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </active> <name translate="label"> <label>Method Name</label> <frontend_type>text</frontend_type> <sort_order>3</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> </name> <price translate="label"> <label>Price</label> <frontend_type>text</frontend_type> <validate>validate-number validate-zero-or-greater</validate> <sort_order>5</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </price> <handling_type translate="label"> <label>Calculate Handling Fee</label> <frontend_type>select</frontend_type> <source_model>shipping/source_handlingType</source_model> <sort_order>7</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </handling_type> <handling_fee translate="label"> <label>Handling Fee</label> <frontend_type>text</frontend_type> <validate>validate-number validate-zero-or-greater</validate> <sort_order>8</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </handling_fee> <sort_order translate="label"> <label>Sort Order</label> <frontend_type>text</frontend_type> <sort_order>100</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </sort_order> <title translate="label"> <label>Title</label> <frontend_type>text</frontend_type> <sort_order>2</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> </title> <type translate="label"> <label>Type</label> <frontend_type>select</frontend_type> <source_model>adminhtml/system_config_source_shipping_flatrate</source_model> <sort_order>4</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </type> <sallowspecific translate="label"> <label>Ship to Applicable Countries</label> <frontend_type>select</frontend_type> <sort_order>90</sort_order> <frontend_class>shipping-applicable-country</frontend_class> <source_model>adminhtml/system_config_source_shipping_allspecificcountries</source_model> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </sallowspecific> <specificcountry translate="label"> <label>Ship to Specific Countries</label> <frontend_type>multiselect</frontend_type> <sort_order>91</sort_order> <source_model>adminhtml/system_config_source_country</source_model> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> <can_be_empty>1</can_be_empty> </specificcountry> <showmethod translate="label"> <label>Show Method if Not Applicable</label> <frontend_type>select</frontend_type> <sort_order>92</sort_order> <source_model>adminhtml/system_config_source_yesno</source_model> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </showmethod> <specificerrmsg translate="label"> <label>Displayed Error Message</label> <frontend_type>textarea</frontend_type> <sort_order>80</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> </specificerrmsg> <packet_max_weight> <label>Packet Max Weight</label> <frontend_type>text</frontend_type> <sort_order>80</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> </packet_max_weight> </fields> </ignshipment> </groups> </carriers> </sections> </config>
ããã§ãCarrier.phpã¢ãã«ãäœæã§ããŸãã¢ããª/ã³ãŒã/ã³ãã¥ããã£/ IGN /åºè·/ã¢ãã«/ Carrier.php <?php class IGN_Shipment_Model_Carrier extends Mage_Shipping_Model_Carrier_Abstract implements Mage_Shipping_Model_Carrier_Interface { protected $_code = 'ignshipment'; public function collectRates(Mage_Shipping_Model_Rate_Request $request) { $result = Mage::getModel('shipping/rate_result'); $weight = $request->getPackageWeight(); $method = Mage::getModel('shipping/rate_result_method'); $method->setCarrier($this->_code); $method->setCarrierTitle($this->getConfigData('title'));
Mage_Shipping_Model_Carrier_Abstractã¯ã©ã¹ããã¢ãã«ãç¶æ¿ããŸããã€ã³ã¿ãŒãã§ã€ã¹ã¯ãªãã·ã§ã³ã§ããç§ãã¡ã®ããžãã¯ã¯ãããã¯ã¹ã®æ°ãã«ãŠã³ãããæ©èœããŸã 䜿çšããŠããŸãããããã¯ãé
éã³ã¹ãã«ã圱é¿ããŸãããã ãããã®å Žåãåããã¯ã¹ããã®ééã§ã«ãŠã³ãããã³ã¹ããåèšããå¿
èŠããããŸãããã¹ãŠã®è£œåã1ã€ã®å
±éããã¯ã¹ã«åãŸãããšãåãå
¥ããŸããç§ããã«ããŒã«æã£ãŠãããã«ãã¯ã¿ãšã®ãã³ãã¥ãã±ãŒã·ã§ã³ãã®è«çãæè¡çã«ã¯ãHTTPãªã¯ãšã¹ããè¡ã£ãŠäŸ¡æ Œãå°ããã ãã§ããã®ã³ãŒããã¢ãã«ã§è¡ãããšã¯ãããŸãããã¢ããª/ã³ãŒã/ã³ãã¥ããã£/ IGN /åºè·/ãã«ããŒ/ Data.php <?php class IGN_Shipment_Helper_Data extends Mage_Core_Helper_Abstract { public function getPacketCost($weight) { $request = new Zend_Http_Client(); $request->setUri('http://tarifikator.belpost.by/forms/international/packet.php'); $request->setParameterPost(array( 'who'=>'ur', 'type'=>'registered', 'priority'=>'priority', 'to'=>'other', 'weight'=>$weight )); $response = $request->request(Zend_Http_Client::POST); $html = $response->getBody(); $tag_regex = "/<blockquote>(.*)<\/blockquote>/im"; $sum_reqex = "/(\d+)/is"; preg_match_all($tag_regex, $html, $matches, PREG_PATTERN_ORDER); if(isset($matches[1]) && isset($matches[1][0])) { preg_match($sum_reqex,$matches[1][0],$matches); if(isset($matches[0])) { return (float)$matches[0]; } }
ãããããç§ã®åžžé£ã«è³ªåããããŸãã圌ãã«ã質åããããŸããããäœå-è§Šããªãããšããååã«ä»»ããŸããããäŸ¡æ Œããèªèãããããã»ã¹ãæãäžããããšã¯ã§ããŸãããããã¯ãã¹ãŠãäŸãšããŠã®ã¿æäŸãããŠããŸãã補åçã§ã¯ããã®ãããªã³ãŒãã¯æ©èœããŸãããäžè¬ã«ããµãŒãã¹ã®åœ¢ã§éçºãããã£ãã·ã³ã°ã远å ãã䟡å€ããããŸãããããã§ãã³ã¹ãèšç®åŒãèšç®ããã®ã¯è¯ãããšã§ããããããªããšãã¡ãŒã«ãµãŒããŒã䜿çšã§ããªãå ŽåããŸãã¯ãã¶ã€ã³ãæŽæ°ãããšãã«åé¡ãçºçããŸãããµã€ãã®ã©ããã§ã³ã¹ããèšç®ããããã®åŒãæ€çŽ¢ããããå奜çãªã¡ãŒã«ã®åŸæ¥å¡ããã®ã¡ãŒã«ã§å°ããããšãã§ããŸãããŸãšãããšã
é
éæ¹æ³ã¯ãç·ééã«åºã¥ããŠã³ã¹ããèšç®ã§ããŸããééã¯ååã®æšæºå±æ§ããååŸãããŸãããŸãã管çè
ãå補åã«ããã瀺ãã®ãé¢åã§ã¯ãªãã£ãå Žåããã¹ãŠãæ©èœããŸããçµè«ãšããŠãçããã®æåããç¥ãããŸãããããŠãããããå€ãã®ãšã©ãŒã«ã€ããŠã¯ãã§ããã°LANã«æžã蟌ã¿ãŸããpsç§ã¯ãç¬éãã€ãã¿ãç§ã®å°ããªyoutubeãã£ã³ãã«ã宣äŒãããããããŸããããããMagentoã ãã§ãªããããã«ã¹ããªãŒããŒããããŸãããããŠããŸããªãMagento 2ã®åæãåãäžããŸããæé«ïŒ