{"id":180555,"date":"2014-02-09T18:51:03","date_gmt":"2014-02-09T14:51:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=180555"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=180555","title":{"rendered":"<span class=\"post_title\">\u041f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u0432 Magento \u2014 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0435\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430<\/span>"},"content":{"rendered":"<div class=\"content html_format\">\n<blockquote><p>\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u043e Magento \u043d\u0435 \u043f\u0438\u0448\u0438, \u0430 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u043c\u043d\u043e\u0433\u043e \ud83d\ude09 \u00a9 <a href=\"http:\/\/habrahabr.ru\/users\/jeje\/\">jeje<\/a><\/p><\/blockquote>\n<p>  \u041f\u0440\u0438 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 Magento, \u044f \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b \u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0435\u0439, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445, \u043e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435 \u043e\u043d\u0438 \u0434\u0430\u044e\u0442 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u00ab\u0441\u0434\u0435\u043b\u0430\u0439 \u0442\u043e, \u0441\u0434\u0435\u043b\u0430\u0439 \u044d\u0442\u043e \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0448\u044c \u044d\u0442\u043e\u00bb, \u043d\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u044f \u0437\u0430\u0447\u0435\u043c \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u0442 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0448\u0430\u0433. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u0440\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0447\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043d\u0435 \u0442\u0430\u043a, \u0442\u0430\u043a\u0436\u0435 \u0442\u0440\u0443\u0434\u043d\u0435\u0435 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u044b\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u043f\u043e\u0434 \u0441\u0432\u043e\u0438 \u043d\u0443\u0436\u0434\u044b.<\/p>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u043f\u044b\u0442\u0430\u044e\u0441\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e \u0441 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u00abDS News\u00bb, \u0433\u0434\u0435 DS \u2014 \u044d\u0442\u043e Namespace (\u041f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0451\u043d), \u0430 News \u2014 \u044d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f. \u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u043e\u044f\u0442\u044c\u0441\u044f \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0430 \u0438\u043c\u0451\u043d \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u043c\u043e\u0434\u0443\u043b\u0435\u0439. \u041e\u0441\u043e\u0431\u044b\u0439 \u0443\u043f\u043e\u0440 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0432 \u0444\u0430\u0439\u043b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0443\u0437\u043b\u043e\u0432 \u0438 \u043c\u0435\u0441\u0442\u0430, \u0433\u0434\u0435 \u043e\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f. \u0421\u0430\u043c \u044f \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u043c \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f, \u0442.\u043a. \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043e\u0442\u043a\u0443\u0434\u0430 \u043a\u0430\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0434\u0443\u0442, \u043a\u0430\u043a\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0438 \u0442.\u0434\u2026 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438. \u0410 \u0442\u0443\u0442 \u0432\u0441\u0451 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \ud83d\ude42<\/p>\n<p>  \u041d\u0435 \u0431\u0443\u0434\u0443 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 Magento \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0442\u043e\u0432\u0430\u0440\u0430\u043c\u0438, \u0441\u0447\u0438\u0442\u0430\u044f \u0447\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e (\u043a\u0435\u0448 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 <em>System\/Cache Management<\/em>) \u2014 \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0440\u0430\u0437\u0443 \u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. <\/p>\n<p>  <a name=\"habracut\"><\/a><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0428\u0430\u0433 1. \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435<\/b><\/p>\n<div class=\"spoiler_text\">\u041d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0448\u0430\u0433\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u043d\u043e \u0437\u0430\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 (\u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435):<\/p>\n<ol>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e <em>\/app\/code\/local\/DS\/News<\/em><\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b <em>etc\/config.xml<\/em><br \/> \n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot; ?&gt; &lt;config&gt;     &lt;modules&gt;         &lt;DS_News&gt;             &lt;version&gt;0.0.1&lt;\/version&gt;         &lt;\/DS_News&gt;     &lt;\/modules&gt; &lt;\/config&gt; <\/code><\/pre>\n<p>  <\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b <em>DS_News.xml<\/em> \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 <em>\/app\/etc\/modules\/<\/em><br \/> \n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot; ?&gt; &lt;config&gt;     &lt;modules&gt;         &lt;DS_News&gt;             &lt;active&gt;true&lt;\/active&gt;             &lt;codePool&gt;local&lt;\/codePool&gt;         &lt;\/DS_News&gt;     &lt;\/modules&gt; &lt;\/config&gt; <\/code><\/pre>\n<p>  <\/li>\n<\/ol>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439 \u0438 \u0444\u0430\u0439\u043b\u043e\u0432, \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u043c\u043e\u0434\u0443\u043b\u044c DS_News. \u0414\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435 \u043f\u043e \u043f\u0443\u0442\u0438 <em>System\/Configuration\/Advanced\/Advanced\/Disable Modules Output<\/em>.<\/p>\n<p>  \u0412 \u043f\u0443\u043d\u043a\u0442\u0435 1 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f <em>\/app\/code\/local\/DS\/News<\/em>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043e\u0434 \u043c\u043e\u0434\u0443\u043b\u044f: \u043c\u043e\u0434\u0435\u043b\u0438, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b, \u0445\u0435\u043b\u043f\u0435\u0440\u044b \u0438 \u0442.\u0434\u2026 \u0412 \u043f\u0443\u043d\u043a\u0442\u0435 2 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f <em>etc<\/em>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0444\u0430\u0439\u043b\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0434\u0443\u043b\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 <em>config.xml<\/em>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u043a\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0441\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044f. \u0412 \u043f\u0443\u043d\u043a\u0442\u0435 3 \u043c\u043e\u0434\u0443\u043b\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435.<\/p>\n<p>  \u041f\u043e \u0444\u0430\u043a\u0442\u0443, \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0434\u0443\u043b\u044f \u0441\u0430\u043c\u044b\u043c \u0432\u0430\u0436\u043d\u044b\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0443\u043d\u043a\u0442 3 \u2014 \u043c\u043e\u0434\u0443\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435 \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043c\u043e\u0434\u0443\u043b\u044f. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 <em>DS_News.xml<\/em> \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 <em>\/app\/etc\/modules\/<\/em> \u0442\u043e\u0436\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u2014 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0430\u0440\u0441\u0438\u0442 \u0432\u0441\u0435 XML \u0444\u0430\u0439\u043b\u044b \u0438\u0437 \u0434\u0430\u043d\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u2014 \u0432\u0441\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u043e\u0434\u043d\u043e\u043c XML \u0444\u0430\u0439\u043b\u0435.<\/p>\n<p>  \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044f <em>DS_News<\/em> \u0432 xml \u0444\u0430\u0439\u043b\u0430\u0445 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0447\u0430\u0441\u0442\u0435\u0439: <nobr><em>[\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 namespace]_[\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043c\u043e\u0434\u0443\u043b\u044f]<\/em><\/nobr>. \u0412 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0431\u0443\u043a\u0432, \u0438, \u0442\u0430\u043a\u0436\u0435, \u0432\u0430\u0436\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u0432 \u0444\u0430\u0439\u043b\u0430\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0442\u043e\u0447\u043d\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439 \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430 *nix \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445.<\/p>\n<p>  \u0412 \u0444\u0430\u0439\u043b\u0435 <em>\/app\/etc\/modules\/DS_News.xml<\/em> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u0442\u0435\u0433\u0430: <em>active<\/em> \u0438 <em>codePool<\/em>. \u041f\u0435\u0440\u0432\u044b\u0439 \u0442\u0435\u0433 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\/\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u2014 \u0437\u0430 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 <em>\/app\/code\/<\/em>: <strong>core<\/strong> (\u044f\u0434\u0440\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u044b), <strong>community<\/strong> (\u043c\u043e\u0434\u0443\u043b\u0438, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e\u043c Magento) \u0438\u043b\u0438 <strong>local<\/strong> (\u043c\u043e\u0434\u0443\u043b\u0438, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438).<\/p><\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0428\u0430\u0433 2. \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/b><\/p>\n<div class=\"spoiler_text\">\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043e\u0434\u0443\u043b\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u0438. Magento \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\/\u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/p>\n<ol>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b <em>sql\/dsnews_setup\/install-0.0.1.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  die('DS News module setup');  $installer = $this; $installer-&gt;startSetup(); $installer-&gt;run(&quot;CREATE TABLE ds_news_entities (         `news_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,         `title` VARCHAR(255) NOT NULL,         `content` TEXT NOT NULL,         `created` DATETIME,          PRIMARY KEY (`news_id`)     ) ENGINE=InnoDB DEFAULT CHARSET=utf8;&quot;);  $installer-&gt;endSetup();  <\/code><\/pre>\n<p>  <\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 <em>etc\/config.xml<\/em> \u0441\u0435\u043a\u0446\u0438\u044e \u0441 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u043c \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438:<br \/> \n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot; ?&gt; &lt;config&gt;     &lt;modules&gt;         ...     &lt;\/modules&gt;     &lt;global&gt;         &lt;resources&gt;             &lt;dsnews_setup&gt;                 &lt;setup&gt;                     &lt;module&gt;DS_News&lt;\/module&gt;                 &lt;\/setup&gt;             &lt;\/dsnews_setup&gt;         &lt;\/resources&gt;     &lt;\/global&gt; &lt;\/config&gt; <\/code><\/pre>\n<p>  <\/li>\n<\/ol>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0434\u0435\u043b\u0430\u043d\u044b, \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u0430\u0439\u0442 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435. \u0415\u0441\u043b\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0434\u043f\u0438\u0441\u044c <strong>DS News module setup<\/strong>, \u0442\u043e \u0432\u0441\u0451 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e. \u0427\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0441 <em>die<\/em> \u0432 \u0444\u0430\u0439\u043b\u0435 <em>install-0.0.1.php<\/em>, \u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043e\u043a\u043d\u043e \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 <em>core_resource<\/em>, \u0430 \u0432 \u0431\u0430\u0437\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 <em>ds_news_entities<\/em>.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043d\u0430\u0434\u043f\u0438\u0441\u044c \u043d\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f, \u0442\u043e, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043c\u043e\u0434\u0443\u043b\u044c \u0431\u044b\u043b \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0438 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0435 <em>dsnews_setup<\/em> \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b <em>core_resource<\/em> \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u0430\u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e SQL \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0437\u0430\u043d\u043e\u0432\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043e\u043a\u043d\u043e \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0441 \u0441\u0430\u0439\u0442\u043e\u043c:<\/p>\n<pre><code class=\"sql\">DELETE FROM `core_resource` WHERE `code` = 'dsnews_setup'; <\/code><\/pre>\n<p>  \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 <em>dsnews_setup<\/em> \u0432 <em>config.xml<\/em> \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u044e\u0431\u044b\u043c. \u0413\u043b\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u043b\u043e \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438, \u0433\u0434\u0435 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438. \u0422\u0430\u043a\u0436\u0435, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0442.\u043a. \u044d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b <em>core_resource<\/em>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432\u0441\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b.<\/p>\n<p>  \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435. \u0414\u043b\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u044d\u0442\u043e <em>install-[version].[php|sql]<\/em>, \u0430 \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u0442\u043e <em>upgrade-[version-from]-[version-to].[php|sql]<\/em>. \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u044f \u043a\u043b\u0430\u0441\u0441 <em>Mage_Core_Model_Resource_Setup<\/em>.<\/p><\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0428\u0430\u0433 3. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438\u0437 config.xml<\/b><\/p>\n<div class=\"spoiler_text\">\u0422\u0430\u043a \u043a\u0430\u043a \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043c\u043e\u0434\u0443\u043b\u0435 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446 \u0434\u043e\u043b\u0436\u043d\u044b \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u0430 \u043d\u0435 \u0432 \u0444\u0430\u0439\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u0430\u0439\u043b <em>etc\/config.xml<\/em>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0444\u0430\u0439\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 <em>sql\/dsnews_setup\/install-0.0.1.php<\/em><\/p>\n<ol>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0443\u0437\u0435\u043b \u043c\u043e\u0434\u0435\u043b\u0435\u0439 <em>config\/global\/models\/<\/em> \u0432 \u0444\u0430\u0439\u043b\u0435 <em>etc\/config.xml<\/em><br \/> \n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot; ?&gt; &lt;config&gt;     ...     &lt;global&gt;         &lt;models&gt;             &lt;dsnews&gt;                 &lt;resourceModel&gt;dsnews_resource&lt;\/resourceModel&gt;             &lt;\/dsnews&gt;             &lt;dsnews_resource&gt;                 &lt;entities&gt;                     &lt;table_news&gt;                         &lt;table&gt;ds_news_entities&lt;\/table&gt;                     &lt;\/table_news&gt;                 &lt;\/entities&gt;             &lt;\/dsnews_resource&gt;         &lt;\/models&gt;         &lt;resources&gt;             ...         &lt;\/resources&gt;     &lt;\/global&gt; &lt;\/config&gt; <\/code><\/pre>\n<p>  <\/li>\n<li>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u0430\u0439\u043b <em>sql\/dsnews_setup\/install-0.0.1.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  $installer = $this; $tableNews = $installer-&gt;getTable('dsnews\/table_news');  die($tableNews);  $installer-&gt;startSetup(); $installer-&gt;run(&quot;DROP TABLE IF EXISTS {$tableNews}&quot;); $installer-&gt;run(&quot;CREATE TABLE {$tableNews} (         `news_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,         `title` VARCHAR(255) NOT NULL,         `content` TEXT NOT NULL,         `created` DATETIME,          PRIMARY KEY (`news_id`)     ) ENGINE=InnoDB DEFAULT CHARSET=utf8;&quot;);  $installer-&gt;endSetup();  <\/code><\/pre>\n<p>  <\/li>\n<\/ol>\n<p>  \u0415\u0441\u043b\u0438 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0432\u044b\u0432\u0435\u0434\u0435\u0442\u0441\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u044b <em>ds_news_entities<\/em>, \u0442\u043e \u0432\u0441\u0451 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u2014 \u043c\u043e\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0441 <em>die<\/em> \u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043e\u043a\u043d\u043e \u0434\u043b\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043c\u043e\u0434\u0443\u043b\u044f. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b <em>core_resource<\/em> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u0430\u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e SQL \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430:<\/p>\n<pre><code class=\"sql\">DELETE FROM `core_resource` WHERE `code` = 'dsnews_setup'; <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443 \u043d\u0430\u0441 \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u043e SQL \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0431\u044b\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u044d\u0442\u0430\u043f\u0435, \u0432 \u0444\u0430\u0439\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0431\u044b\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043a\u043e\u0434 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/p>\n<p>  \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 \u043c\u043e\u0434\u0435\u043b\u0438 <em>dsnews<\/em>, \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 \u043c\u043e\u0434\u0435\u043b\u0438-\u0440\u0435\u0441\u0443\u0440\u0441\u0430 <em>dsnews_resource<\/em>, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0432 <em>config\/global\/models\/<\/em>, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u044e\u0431\u044b\u043c. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0443\u0437\u043b\u0430 \u0441\u0440\u0435\u0434\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439\/\u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p>  \u0412\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0434\u0430 \u0438\u043d\u0441\u0442\u0440\u0430\u043b\u043b\u0435\u0440\u0430 \u0432 \u043f\u0443\u043d\u043a\u0442\u0435 2 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <em>$installer-&gt;getTable(&#8216;dsnews\/table_news&#8217;)<\/em>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0443<br \/>  <nobr><em>[\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 \u043c\u043e\u0434\u0435\u043b\u0438]\/[\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 entities \u0440\u0435\u0441\u0443\u0440\u0441\u0430]<\/em><\/nobr>. \u0421\u0430\u043c \u0443\u0437\u0435\u043b \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0435 \u0445\u0440\u0430\u043d\u0438\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0411\u0414, \u043f\u043e \u043b\u043e\u0433\u0438\u043a\u0435 Magento, \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0434\u0435\u043b\u0435\u0439-\u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. \u041f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043c\u043e\u0434\u0435\u043b\u044c \u0445\u0440\u0430\u043d\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0443\u0437\u0435\u043b \u043c\u043e\u0434\u0435\u043b\u0438-\u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u0432 \u0442\u0435\u0433\u0435 <em>resourceModel<\/em>.<\/p><\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0428\u0430\u0433 4. \u0414\u043e\u0441\u0442\u0443\u043f \u043a \u043c\u043e\u0434\u0443\u043b\u044e \u0447\u0435\u0440\u0435\u0437 FrontEnd<\/b><\/p>\n<div class=\"spoiler_text\">\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0432\u0435\u0434\u0435\u043c \u043d\u0430\u0434\u043f\u0438\u0441\u044c \u00abHello World\u00bb \u043d\u0430 \u0441\u0430\u0439\u0442\u0435.<\/p>\n<ol>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u043a\u0446\u0438\u044e <em>frontend<\/em> \u0432 \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 <em>etc\/config.xml<\/em><br \/> \n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot; ?&gt; &lt;config&gt;     &lt;modules&gt;         ...     &lt;\/modules&gt;     &lt;frontend&gt;         &lt;routers&gt;             &lt;dsnews&gt;                 &lt;use&gt;standard&lt;\/use&gt;                 &lt;args&gt;                     &lt;module&gt;DS_News&lt;\/module&gt;                     &lt;frontName&gt;news&lt;\/frontName&gt;                 &lt;\/args&gt;             &lt;\/dsnews&gt;         &lt;\/routers&gt;     &lt;\/frontend&gt;     &lt;global&gt;         ...     &lt;\/global&gt; &lt;\/config&gt; <\/code><\/pre>\n<p>  <\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b <em>controllers\/IndexController.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_IndexController extends Mage_Core_Controller_Front_Action {      public function indexAction()     {         echo '&lt;h1&gt;News&lt;\/h1&gt;';     }  } <\/code><\/pre>\n<p>  <\/li>\n<\/ol>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <em>http:\/\/site.com\/news\/<\/em> \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043d\u0430\u0434\u043f\u0438\u0441\u044c \u00abNews\u00bb.<\/p>\n<p>  \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 <em>dsnews<\/em>, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 <em>config\/frontend\/routers\/<\/em>, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u044e\u0431\u044b\u043c; \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0441\u0440\u0435\u0434\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u043e\u0443\u0442\u0435\u0440\u043e\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0411\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u044b\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 <em>frontName<\/em> \u2014 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>  \u041f\u0443\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0445\u0435\u043c\u0435: <nobr><em>http:\/\/[site]\/[router]\/[controller]\/[action]<\/em><\/nobr>. \u041f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c <em>[action]<\/em> \u0438\u043b\u0438 \u043f\u0430\u0440\u0443 <em>[controller]\/[action]<\/em>, \u0442\u043e\u0433\u0434\u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e <em>index<\/em>. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u0443\u0442\u0438 <em>http:\/\/site.com\/news\/<\/em>, <em>http:\/\/site.com\/news\/index\/<\/em>, <em>http:\/\/site.com\/news\/index\/index<\/em> \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b\u043c\u0438 \u2014 \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u043a \u043c\u043e\u0434\u0443\u043b\u044e <em>DS News<\/em>, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443 <em>IndexController<\/em> \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e <em>indexAction<\/em>.<\/p><\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0428\u0430\u0433 5. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/b><\/p>\n<div class=\"spoiler_text\">\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435, \u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u0434\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043b\u043e\u0433\u0438\u043a\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043e\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438<\/p>\n<ol>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0448\u0430\u0431\u043b\u043e\u043d\u0430 <em>\/app\/design\/frontend\/[package]\/[theme]\/template\/ds_news\/index.phtml<\/em><br \/> \n<pre><code class=\"html\">&lt;h1&gt;Template ds_news\/index.phtml&lt;\/h1&gt; <\/code><\/pre>\n<p>  <\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043c\u0430\u043a\u0435\u0442\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b <em>\/app\/design\/frontend\/[package]\/[theme]\/layout\/ds_news.xml<\/em><br \/> \n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot; ?&gt; &lt;layout&gt;     &lt;dsnews_index_index&gt;         &lt;reference name=&quot;content&quot;&gt;             &lt;block type=&quot;core\/template&quot; template=&quot;ds_news\/index.phtml&quot; \/&gt;         &lt;\/reference&gt;     &lt;\/dsnews_index_index&gt; &lt;\/layout&gt; <\/code><\/pre>\n<p>  <\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u043a\u0446\u0438\u044e <em>layout<\/em> \u0432 \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 <em>etc\/config.xml<\/em><br \/> \n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot; ?&gt; &lt;config&gt;     &lt;modules&gt;         ...     &lt;\/modules&gt;     &lt;frontend&gt;         &lt;layout&gt;             &lt;updates&gt;                 &lt;dsnews&gt;                     &lt;file&gt;ds_news.xml&lt;\/file&gt;                 &lt;\/dsnews&gt;             &lt;\/updates&gt;         &lt;\/layout&gt;         &lt;routers&gt;             ...         &lt;\/routers&gt;     &lt;\/frontend&gt;     &lt;global&gt;         ...     &lt;\/global&gt; &lt;\/config&gt; <\/code><\/pre>\n<p>  <\/li>\n<li>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 <em>controllers\/IndexController.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_IndexController extends Mage_Core_Controller_Front_Action {      public function indexAction()     {         $this-&gt;loadLayout();         $this-&gt;renderLayout();     }  } <\/code><\/pre>\n<p>  <\/li>\n<\/ol>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e \u043f\u0443\u0442\u0438 <em>http:\/\/site.com\/news\/<\/em> \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0441\u0430\u0439\u0442\u0430 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0431\u043b\u043e\u043a\u0430\u043c\u0438 (header, footer, sidebar), \u0430 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0430 \u043d\u0430\u0434\u043f\u0438\u0441\u044c \u00abTemplate ds_news\/index.phtml\u00bb.<\/p>\n<p>  \u0412\u0441\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 <em>template<\/em>, \u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043c\u0430\u043a\u0435\u0442\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u2014 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438  \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0442\u0435\u043c\u044b <em>\/app\/design\/frontend\/[package]\/[theme]<\/em>. \u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 Magento \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u043c\u044b, \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0442\u0435\u043c <em>\/app\/design\/frontend\/base\/<\/em> \u0438 <em>\/app\/design\/frontend\/default\/<\/em> \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0442\u0435\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0432\u0435\u0440\u0441\u0438\u0438 Magento.<\/p>\n<p>  \u041f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0430\u043a\u0435\u0442\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b <em>$this-&gt;loadLayout()<\/em> \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u043e\u0447\u0435\u0440\u0451\u0434\u043d\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 <em>layout handle<\/em>-\u043e\u0432 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043f\u0435\u0440\u0432\u044b\u043c \u0433\u0440\u0443\u0437\u0438\u0442\u0441\u044f <em>handle <strong>default<\/strong><\/em>, \u0430 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u2014 <em>handle<\/em> \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <em>[router]_[controller]_[action]<\/em>, \u0433\u0434\u0435 <em>[router]<\/em> \u2014 \u044d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 <em>config\/frontend\/routers\/[router]<\/em>.<\/p>\n<p>  \u0412 \u043f\u0443\u043d\u043a\u0442\u0435 2 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f <em>layout handle<\/em> \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\/\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f: <em>dsnews_index_index<\/em>, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0431\u043b\u043e\u043a \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 <em>core\/template<\/em> \u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c <em>dsnews\/index.phtml<\/em>, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u043c \u0432 \u043f\u0443\u043d\u043a\u0442\u0435 1. \u0412 \u043f\u0443\u043d\u043a\u0442\u0435 3 \u0432 \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0435\u043a\u0446\u0438\u044f <em>config\/frontend\/layout\/updates<\/em>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u0430\u0439\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0435\u043c\u044b.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u043c\u0430\u043a\u0435\u0442\u0435 \u0442\u0435\u043c\u044b \u043d\u0435 \u0442\u0430\u043a \u043c\u043d\u043e\u0433\u043e \u0438 \u043c\u043e\u0434\u0443\u043b\u044c \u043d\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445, \u0442\u043e <em>layout handle<\/em> \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u0444\u0430\u0439\u043b\u0435 <em>\/app\/design\/frontend\/[package]\/[theme]\/layout\/local.xml<\/em>,<br \/>  \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0433\u0440\u0443\u0437\u0438\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u2014 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432 \u0444\u0430\u0439\u043b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0434\u0443\u043b\u044f <em>config.xml<\/em><\/p>\n<p>  \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0435\u043d\u0438\u044f \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f <em>layout handle<\/em>, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0445 <em>handle<\/em>-\u043e\u0432 \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435:  <\/p>\n<pre><code class=\"php\">&lt;?php  class DS_News_IndexController extends Mage_Core_Controller_Front_Action {      public function indexAction()     {         $this-&gt;loadLayout();         $layoutHandles = $this-&gt;getLayout()-&gt;getUpdate()-&gt;getHandles();         echo '&lt;pre&gt;' . print_r($layoutHandles, true) . '&lt;\/pre&gt;';     }  } <\/code><\/pre>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432\u044b\u0432\u043e\u0434, \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 \u0434\u0430\u043d\u043d\u043e\u0433\u043e:  <\/p>\n<pre> Array (     [0] =&gt; default     [1] =&gt; STORE_default     [2] =&gt; THEME_frontend_[package]_[theme]     [3] =&gt; dsnews_index_index     [4] =&gt; customer_logged_out ) <\/pre>\n<\/p><\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0428\u0430\u0433 6. \u041f\u043e\u043a\u0430\u0437 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/b><\/p>\n<div class=\"spoiler_text\">\u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u0432 \u0448\u0430\u0431\u043b\u043e\u043d, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 \u0431\u0430\u0437\u044b. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0431\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439:<\/p>\n<ol>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0431\u0430\u0437\u0443 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430:<br \/> \n<pre><code class=\"sql\">INSERT INTO `ds_news_entities` VALUES     (NULL, 'News 1', 'News 1 Content', '2013-10-16 17:45'),     (NULL, 'News 2', 'News 2 Content', '2013-11-07 04:12'),     (NULL, 'News 3', 'News 3 Content', '2014-01-12 15:55'); <\/code><\/pre>\n<p>  <\/li>\n<li>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d <em>\/app\/design\/frontend\/[package]\/[theme]\/template\/dsnews\/index.phtml<\/em><br \/> \n<pre><code class=\"php\">&lt;h1&gt;News&lt;\/h1&gt; &lt;?php $news = Mage::registry('news'); foreach ($news as $item) {     echo '&lt;h2&gt;' . $item['title'] . '&lt;\/h2&gt;'; } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 <em>controllers\/IndexController.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_IndexController extends Mage_Core_Controller_Front_Action {      public function indexAction()     {         $resource = Mage::getSingleton('core\/resource');         $read = $resource-&gt;getConnection('core_read');         $table = $resource-&gt;getTableName('dsnews\/table_news');          $select = $read-&gt;select()                 -&gt;from($table, array('news_id', 'title', 'content', 'created'))                 -&gt;order('created DESC');          $news = $read-&gt;fetchAll($select);         Mage::register('news', $news);          $this-&gt;loadLayout();         $this-&gt;renderLayout();     }  } <\/code><\/pre>\n<p>  <\/li>\n<\/ol>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0431\u0430\u0437\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0435\u0441\u0442\u0440\u0430 <em>Mage::registry<\/em> \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u043e\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0432 \u0448\u0430\u0431\u043b\u043e\u043d. \u0420\u0435\u0435\u0441\u0442\u0440 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e \u0432 \u043b\u044e\u0431\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043a\u043e\u0434\u0430 \u0438, \u0432 \u0440\u0435\u0434\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u0431\u044b\u0432\u0430\u0435\u0442 \u0441\u0430\u043c\u044b\u043c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0432 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445.<\/p>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0435\u0441\u0442\u0440\u0430, \u043a\u0430\u043a \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u043c \u043d\u0435\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u041f\u0440\u044f\u043c\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u043a\u043e\u0434\u0430. \u041b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0435 \u0441\u0430\u043c\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u2014 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435.<\/p><\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0428\u0430\u0433 7. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0435\u0439<\/b><\/p>\n<div class=\"spoiler_text\">\u041f\u043e \u043b\u043e\u0433\u0438\u043a\u0435 Magento (\u0438 \u043c\u043d\u043e\u0433\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u041e\u041e\u041f \u0441\u0438\u0441\u0442\u0435\u043c), \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432\/\u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439, \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u043c\u043e\u0434\u0435\u043b\u0435\u0439-\u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u043a\u0430\u043a \u0431\u043e\u043b\u0435\u0435 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435 \u2014 \u0442\u043e\u0433\u0434\u0430, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 (\u0411\u0414, \u0444\u0430\u0439\u043b\u044b \u0438 \u0442.\u0434&#8230;), \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c-\u0440\u0435\u0441\u0443\u0440\u0441, \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0449\u0435\u0439\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435\u043c \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u0435\u043c \u0432\u044b\u0432\u043e\u0434 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u0435\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u044b\u0432\u043e\u0434 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u043f\u043e \u0430\u0439\u0434\u0438:<\/p>\n<ol>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u0437\u0435\u043b <em>class<\/em> \u0432 \u0443\u0437\u0435\u043b \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0432 \u0444\u0430\u0439\u043b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438:<br \/> \n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot; ?&gt; &lt;config&gt;     &lt;modules&gt;         ...     &lt;\/modules&gt;     &lt;frontend&gt;         ...     &lt;\/frontend&gt;     &lt;global&gt;         &lt;models&gt;             &lt;dsnews&gt;                 &lt;class&gt;DS_News_Model&lt;\/class&gt;                 &lt;resourceModel&gt;dsnews_resource&lt;\/resourceModel&gt;             &lt;\/dsnews&gt;             &lt;dsnews_resource&gt;                 &lt;class&gt;DS_News_Model_Resource&lt;\/class&gt;                 &lt;entities&gt;                     &lt;table_news&gt;                         &lt;table&gt;ds_news_entities&lt;\/table&gt;                     &lt;\/table_news&gt;                 &lt;\/entities&gt;             &lt;\/dsnews_resource&gt;         &lt;\/models&gt;         &lt;resources&gt;             ...         &lt;\/resources&gt;     &lt;\/global&gt; &lt;\/config&gt; <\/code><\/pre>\n<p>  <\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 <em>Model\/News.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Model_News extends Mage_Core_Model_Abstract {      public function _construct()     {         parent::_construct();         $this-&gt;_init('dsnews\/news');     }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 <em>Model\/Resource\/News.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Model_Resource_News extends Mage_Core_Model_Mysql4_Abstract {      public function _construct()     {         $this-&gt;_init('dsnews\/table_news', 'news_id');     }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 <em>Model\/Resource\/News\/Collection.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Model_Resource_News_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract {      public function _construct()     {         parent::_construct();         $this-&gt;_init('dsnews\/news');     }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 <em>controllers\/IndexController.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_IndexController extends Mage_Core_Controller_Front_Action {      public function indexAction()     {         $news = Mage::getModel('dsnews\/news')-&gt;getCollection()-&gt;setOrder('created', 'DESC');         $viewUrl = Mage::getUrl('news\/index\/view');          echo '&lt;h1&gt;News&lt;\/h1&gt;';         foreach ($news as $item) {             echo '&lt;h2&gt;&lt;a href=&quot;' . $viewUrl . '?id=' . $item-&gt;getId() . '&quot;&gt;' . $item-&gt;getTitle() . '&lt;\/a&gt;&lt;\/h2&gt;';         }     }      public function viewAction()     {         $newsId = Mage::app()-&gt;getRequest()-&gt;getParam('id', 0);         $news = Mage::getModel('dsnews\/news')-&gt;load($newsId);          if ($news-&gt;getId() &gt; 0) {             echo '&lt;h1&gt;' . $news-&gt;getTitle() . '&lt;\/h1&gt;';             echo '&lt;div class=&quot;content&quot;&gt;' . $news-&gt;getContent() . '&lt;\/div&gt;';         } else {             $this-&gt;_forward('noRoute');         }     }  } <\/code><\/pre>\n<p>  <\/li>\n<\/ol>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 <em>http:\/\/site.com\/news<\/em> \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u0432 \u0432\u0438\u0434\u0435 \u0441\u0441\u044b\u043b\u043e\u043a, \u043f\u0440\u0438 \u043a\u043b\u0438\u043a\u0435 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u043d\u043e\u0432\u043e\u0441\u0442\u0438.<\/p>\n<p>  \u0412 \u043f\u0443\u043d\u043a\u0442\u0435 1 \u0432 \u0444\u0430\u0439\u043b \u043a\u043e\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0437\u0435\u043b <em>class<\/em>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u044b \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0434\u043b\u044f \u043c\u043e\u0434\u0435\u043b\u0438 <em>DS_News_Model<\/em> \u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430 DS_News_Model_Resource.<\/p>\n<p>  \u041f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 (\u043f\u0443\u043d\u043a\u0442 5) <em>Mage::getModel(&#8216;dsnews\/news&#8217;)<\/em>, \u0444\u0443\u043d\u043a\u0446\u0438\u044f <em>getModel<\/em> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0442\u0438\u043f\u0430 <em>[model]\/[class]<\/em>, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 \u043c\u043e\u0434\u0435\u043b\u0438, \u0433\u0434\u0435 <em>[model]<\/em> \u2014 \u044d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 <em>config\/global\/models\/[model]<\/em>, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 <em>class<\/em> \u2014 <em>DS_News_Model<\/em>, \u0438 \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0443 \u043a\u043b\u0430\u0441\u0441\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <em>[class]<\/em> (\u043f\u0435\u0440\u0432\u0430\u044f \u0431\u0443\u043a\u0432\u0430 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u043b\u043e\u0432\u0435 <em>[class]<\/em> \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u0433\u043b\u0430\u0432\u043d\u0443\u044e). \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0438\u0437 \u0441\u0442\u0440\u043e\u043a\u0438 <em>dsnews\/news<\/em> \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441 <em>DS_News_Model_News<\/em>, \u0430 \u0438\u0437 \u0441\u0442\u0440\u043e\u043a\u0438 <em>dsnews\/news_gallery<\/em> \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441 <em>DS_News_Model_News_Gallery<\/em>.<\/p>\n<p>  \u0412 \u043f\u0443\u043d\u043a\u0442\u0435 2 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u043e\u0432\u043e\u0441\u0442\u0438 <em>DS_News_Model_News<\/em>, \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u0430 <em>$this-&gt;_init(&#8216;dsnews\/news&#8217;)<\/em>: \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 <em>[model]\/[class]<\/em>, \u0433\u0434\u0435 <em>[model]<\/em> \u2014 \u044d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 <em>config\/global\/models\/[model]<\/em>, \u0430 <em>[class]<\/em> \u2014 \u044d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430. \u041e\u0434\u043d\u0430\u043a\u043e, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043c\u043e\u0434\u0435\u043b\u0438, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 <em>config\/global\/models\/[resourceModel]\/class<\/em> \u0440\u0435\u0441\u0443\u0440\u0441\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0432 \u0443\u0437\u043b\u0435 <em>resourceModel<\/em>. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430 <em>$this-&gt;_init(&#8216;dsnews\/news&#8217;)<\/em> \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u043b\u0430\u0441\u0441 <em>DS_News_Model_Resource_News<\/em>.<\/p>\n<p>  \u0412 \u043f\u0443\u043d\u043a\u0442\u0435 3 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441 \u0440\u0435\u0441\u0443\u0440\u0441\u0430 <em>DS_News_Model_Resource_News<\/em>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b <em>$this-&gt;_init(&#8216;dsnews\/table_news&#8217;, &#8216;news_id&#8217;)<\/em>: \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0443\u0442\u044c \u043a \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e \u043d\u0443\u0436\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0430 \u0432\u0442\u043e\u0440\u044b\u043c \u2014 \u043f\u043e\u043b\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0435\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 (PRIMARY KEY) \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/p>\n<p>  \u0412 \u043f\u0443\u043d\u043a\u0442\u0435 4 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 <em>DS_News_Model_News<\/em>.<\/p>\n<p>  \u0412 \u043f\u0443\u043d\u043a\u0442\u0435 5 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0431\u0430\u0437\u044b. \u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043c\u043e\u0434\u0435\u043b\u0438 \u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438. \u0412 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 <em>indexAction<\/em> \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432\u0441\u0435\u0445 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 <em>$news = Mage::getModel(&#8216;dsnews\/news&#8217;)-&gt;getCollection()<\/em>. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u043c\u043e\u0434\u0435\u043b\u0438 <em>DS_News_Model_Resource_News<\/em> + <em>_Collection<\/em>.<\/p>\n<p>  \u0412 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 <em>viewAction<\/em> \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u043f\u043e id, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u043c\u0443 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435. \u0415\u0441\u043b\u0438 \u043d\u043e\u0432\u043e\u0441\u0442\u044c \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u0430\u0439\u0434\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u0442\u043e \u0432\u044b\u0432\u0435\u0434\u0435\u0442\u0441\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 404.<\/p><\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0428\u0430\u0433 8. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u043e\u0432<\/b><\/p>\n<div class=\"spoiler_text\">\u0414\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Magento \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u2014 \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043a\u043e\u0434\u0430, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0435 \u0437\u0430 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433 \u0442\u043e\u0433\u043e \u0438\u043b\u0438 \u0438\u043d\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u043a\u0430 \u043a\u043e\u0434\u0430. \u041d\u0430 \u0448\u0430\u0433\u0435 5: \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0431\u044b\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0431\u043b\u043e\u043a <em>core\/template<\/em>. \u041d\u0430 \u044d\u0442\u043e\u043c \u0448\u0430\u0433\u0435 \u0434\u043b\u044f \u043c\u043e\u0434\u0443\u043b\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0431\u043b\u043e\u043a\u0438 \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u043d\u043e\u0432\u043e\u0441\u0442\u0438.<\/p>\n<ol>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u0437\u0435\u043b \u0431\u043b\u043e\u043a\u043e\u0432 <em>config\/global\/blocks<\/em><br \/> \n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot; ?&gt; &lt;config&gt;     ...     &lt;global&gt;         &lt;blocks&gt;             &lt;dsnews&gt;                 &lt;class&gt;DS_News_Block&lt;\/class&gt;             &lt;\/dsnews&gt;         &lt;\/blocks&gt;         ...     &lt;\/global&gt; &lt;\/config&gt; <\/code><\/pre>\n<p>  <\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u0431\u043b\u043e\u043a\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 <em>Block\/News.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Block_News extends Mage_Core_Block_Template {      public function getNewsCollection()     {         $newsCollection = Mage::getModel('dsnews\/news')-&gt;getCollection();         $newsCollection-&gt;setOrder('created', 'DESC');         return $newsCollection;     }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u0431\u043b\u043e\u043a\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u043d\u043e\u0432\u043e\u0441\u0442\u0438 <em>Block\/View.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Block_View extends Mage_Core_Block_Template {  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 <em>\/app\/design\/frontend\/[package]\/[theme]\/layout\/ds_news.xml<\/em><br \/> \n<pre><code class=\"xml\">&lt;layout&gt;     &lt;dsnews_index_index&gt;         &lt;reference name=&quot;content&quot;&gt;             &lt;block type=&quot;dsnews\/news&quot; template=&quot;ds_news\/index.phtml&quot; \/&gt;         &lt;\/reference&gt;     &lt;\/dsnews_index_index&gt;     &lt;dsnews_index_view&gt;         &lt;reference name=&quot;content&quot;&gt;             &lt;block type=&quot;dsnews\/view&quot; name=&quot;news.content&quot; template=&quot;ds_news\/view.phtml&quot; \/&gt;         &lt;\/reference&gt;     &lt;\/dsnews_index_view&gt; &lt;\/layout&gt; <\/code><\/pre>\n<p>  <\/li>\n<li>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u0430\u0439\u043b \u0448\u0430\u0431\u043b\u043e\u043d\u0430 <em>\/app\/design\/frontend\/[package]\/[theme]\/template\/ds_news\/index.phtml<\/em><br \/> \n<pre><code class=\"php\">&lt;?php $news = $this-&gt;getNewsCollection(); $newsViewUrl = Mage::getUrl('news\/index\/view'); ?&gt; &lt;h1&gt;News&lt;\/h1&gt; &lt;?php foreach ($news as $item): ?&gt;     &lt;h2&gt;         &lt;a href=&quot;&lt;?php echo $newsViewUrl; ?&gt;?id=&lt;?php echo $item-&gt;getId(); ?&gt;&quot;&gt;             &lt;?php echo $item-&gt;getTitle(); ?&gt;         &lt;\/a&gt;     &lt;\/h2&gt; &lt;?php endforeach; ?&gt; <\/code><\/pre>\n<p>  <\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0448\u0430\u0431\u043b\u043e\u043d\u0430 <em>\/app\/design\/frontend\/[package]\/[theme]\/template\/ds_news\/view.phtml<\/em><br \/> \n<pre><code class=\"php\">&lt;h1&gt;&lt;?php echo $newsItem-&gt;getTitle(); ?&gt;&lt;\/h1&gt; &lt;div class=&quot;content&quot;&gt;&lt;?php echo $newsItem-&gt;getContent(); ?&gt;&lt;\/div&gt; <\/code><\/pre>\n<p>  <\/li>\n<li>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u043b\u0435\u0440 <em>controllers\/IndexController.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_IndexController extends Mage_Core_Controller_Front_Action {      public function indexAction()     {         $this-&gt;loadLayout();         $this-&gt;renderLayout();     }      public function viewAction()     {         $newsId = Mage::app()-&gt;getRequest()-&gt;getParam('id', 0);         $news = Mage::getModel('dsnews\/news')-&gt;load($newsId);          if ($news-&gt;getId() &gt; 0) {             $this-&gt;loadLayout();             $this-&gt;getLayout()-&gt;getBlock('news.content')-&gt;assign(array(                 &quot;newsItem&quot; =&gt; $news,             ));             $this-&gt;renderLayout();         } else {             $this-&gt;_forward('noRoute');         }     }  } <\/code><\/pre>\n<p>  <\/li>\n<\/ol>\n<p>  \u041f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b <em>http:\/\/site.com\/news\/<\/em> \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u043a\u0430\u043a \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0441\u0430\u0439\u0442\u0430, \u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u043e\u0442\u043a\u0440\u043e\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u043d\u043e\u0432\u043e\u0441\u0442\u0438.<\/p>\n<p>  \u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0431\u043b\u043e\u043a\u043e\u0432 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0432 \u043f\u0443\u043d\u043a\u0442\u0435 3, \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 <em>indexAction<\/em> \u0442\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432. \u041b\u043e\u0433\u0438\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u0442\u0435\u043f\u0435\u0440\u044c \u043b\u0435\u0436\u0438\u0442 \u043d\u0430 \u0431\u043b\u043e\u043a\u0435 <em>DS_News_Block_News<\/em>, \u0430 \u043b\u043e\u0433\u0438\u043a\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u2014 \u043d\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u0435 <em>\/app\/design\/frontend\/[package]\/[theme]\/template\/dsnews\/index.phtml<\/em>. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0435\u0441\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0430\u0439\u0434\u0431\u0430\u0440\u0435 \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0431\u0435\u0437 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.<\/p>\n<p>  \u0412\u043d\u0443\u0442\u0440\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a\u043e \u0432\u0441\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0430\u043c \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c \u043a\u043b\u0430\u0441\u0441\u0430 \u0431\u043b\u043e\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <em>$this<\/em>, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f\/\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0431\u043b\u043e\u043a\u0430.<\/p>\n<p>  \u0412 \u043f\u0443\u043d\u043a\u0442\u0435 1 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0431\u044b\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0443\u0437\u0435\u043b \u0431\u043b\u043e\u043a\u043e\u0432 \u043c\u043e\u0434\u0443\u043b\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u0432\u044b\u0432\u043e\u0434\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 Magento \u0437\u043d\u0430\u043b\u0430 \u043a \u043a\u0430\u043a\u043e\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u0443 \u0431\u043b\u043e\u043a\u0430 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f. \u041a\u043b\u0430\u0441\u0441\u044b \u0431\u043b\u043e\u043a\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0434\u043b\u044f \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0442\u0438\u043f (type) \u0431\u043b\u043e\u043a\u0430 \u0432 .xml \u0444\u0430\u0439\u043b\u0435. \u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442 <em>type<\/em> \u0431\u043b\u043e\u043a\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0432\u0438\u0434\u0430 <em>[module]\/[block]<\/em>, \u0433\u0434\u0435 <em>[module]<\/em> \u2014 \u044d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 <em>config\/global\/blocks\/[module]<\/em>, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 <em>class<\/em> \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u0431\u043b\u043e\u043a\u0430; a <em>[block]<\/em> \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 <em>type=\u00abdsnews\/news\u00bb<\/em> \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d \u0432 \u043a\u043b\u0430\u0441\u0441 \u0431\u043b\u043e\u043a\u0430 <em>DS_News_Block_News<\/em>.<\/p>\n<p>  \u0412 \u043f\u0443\u043d\u043a\u0442\u0435 4 \u043f\u0440\u043e\u0438\u0437\u0448\u043b\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b <em>&lt;reference name=\u00abcontent\u00bb<\/em> \u0431\u044b\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043a \u0431\u043b\u043e\u043a\u0430\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u043b\u043e\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u0432 \u043c\u0430\u043a\u0435\u0442\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u0414\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u0431\u044b\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043d\u043e\u0432\u044b\u0439 <em>layout handle<\/em> <em>dsnews_index_view<\/em>, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u044b\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0431\u043b\u043e\u043a <em>&lt;block type=\u00abdsnews\/view\u00bb name=\u00abnews.content\u00bb template=\u00abds_news\/view.phtml\u00bb \/&gt;<\/em>. \u0412\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 <em>viewAction<\/em> \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043c\u0430\u043a\u0435\u0442\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0431\u043b\u043e\u043a\u0443 \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <em>assign<\/em>, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u041f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043a \u043a\u043b\u044e\u0447\u0430\u043c \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c.<\/p><\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0428\u0430\u0433 9. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0430\u0434\u043c\u0438\u043d\u043a\u0438 \u0434\u043b\u044f \u043c\u043e\u0434\u0443\u043b\u044f<\/b><\/p>\n<div class=\"spoiler_text\">\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0434\u0443\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0441\u0442\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043a\u0430\u043a-\u0442\u043e \u044d\u0442\u0438 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u0431\u0430\u0437\u0443. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044f.<\/p>\n<ol>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 <em>controllers\/Adminhtml\/NewsController.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Adminhtml_NewsController extends Mage_Adminhtml_Controller_Action {      public function indexAction()     {         echo '&lt;h1&gt;News Module: Admin section&lt;\/h1&gt;';     }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0443\u0442\u044c \u0434\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 <em>etc\/config.xml<\/em><br \/> \n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot; ?&gt; &lt;config&gt;     ...     &lt;admin&gt;         &lt;routers&gt;             &lt;dsnews_admin&gt;                 &lt;use&gt;admin&lt;\/use&gt;                 &lt;args&gt;                     &lt;module&gt;DS_News&lt;\/module&gt;                     &lt;frontName&gt;dsnews_admin&lt;\/frontName&gt;                 &lt;\/args&gt;             &lt;\/dsnews_admin&gt;         &lt;\/routers&gt;     &lt;\/admin&gt;     ... &lt;\/config&gt; <\/code><\/pre>\n<p>  <\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0443\u043d\u043a\u0442 \u043c\u0435\u043d\u044e \u0434\u043b\u044f \u043c\u043e\u0434\u0443\u043b\u044f \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435, \u0438\u0437\u043c\u0435\u043d\u0438\u0432 \u0444\u0430\u0439\u043b <em>etc\/config.xml<\/em><br \/> \n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot; ?&gt; &lt;config&gt;     ...     &lt;adminhtml&gt;         &lt;menu&gt;             &lt;dsnews module=&quot;dsnews&quot;&gt;                 &lt;title&gt;News&lt;\/title&gt;                 &lt;sort_order&gt;77&lt;\/sort_order&gt;                 &lt;action&gt;dsnews_admin\/adminhtml_news&lt;\/action&gt;             &lt;\/dsnews&gt;         &lt;\/menu&gt;     &lt;\/adminhtml&gt;     ... &lt;\/config&gt; <\/code><\/pre>\n<p>  <\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0445\u0435\u043b\u043f\u0435\u0440-\u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0443 <em>Helper\/Data.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Helper_Data extends Mage_Core_Helper_Abstract {  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u043a\u0446\u0438\u044e \u0445\u0435\u043b\u043f\u0435\u0440\u0430 \u0432 \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 <em>etc\/config.xml<\/em><br \/> \n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot; ?&gt; &lt;config&gt;     ...     &lt;global&gt;         ...         &lt;helpers&gt;             &lt;dsnews&gt;                 &lt;class&gt;DS_News_Helper&lt;\/class&gt;             &lt;\/dsnews&gt;         &lt;\/helpers&gt;         ...     &lt;\/global&gt;     ... &lt;\/config&gt; <\/code><\/pre>\n<p>  <\/li>\n<\/ol>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u0437\u0430\u043b\u043e\u0433\u0438\u043d\u0438\u0432\u0448\u0438\u0441\u044c \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043f\u0443\u043d\u043a\u0442 \u043c\u0435\u043d\u044e <strong>News<\/strong>, \u043f\u0435\u0440\u0435\u0439\u0434\u044f \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043d\u0430\u0434\u043f\u0438\u0441\u044c <em>\u00abNews Module: Admin section\u00bb<\/em>.<\/p>\n<p>  \u0412 \u043f\u0443\u043d\u043a\u0442\u0435 1 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u043b\u044f \u0430\u0434\u043c\u0438\u043d\u043a\u0438 \u043c\u043e\u0434\u0443\u043b\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u043f\u0443\u043d\u043a\u0442\u0435 2 \u2014 \u0432 \u0440\u043e\u0443\u0442\u0435\u0440\u0430\u0445 <em>config\/admin\/routers\/[router]<\/em>. \u041f\u043e\u0441\u043b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043f\u043e \u043f\u0443\u0442\u0438 <em>http:\/\/site.com\/index.php\/[frontName]\/[controller]\/index\/<\/em>, \u0433\u0434\u0435 <em>[frontName]<\/em> \u2014 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 <em>config\/admin\/routers\/[router]\/args\/[frontName]<\/em>, \u0430 <em>[controller]<\/em> \u2014 \u044d\u0442\u043e \u043f\u0443\u0442\u044c, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438\u0437 \u043a\u043b\u0430\u0441\u0441\u0430 \u043c\u043e\u0434\u0443\u043b\u044f <em>DS_News<\/em> + <em>[controller]<\/em> + <em>Controller<\/em>. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u044b \u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <em>adminhtml_news<\/em> \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 <em>DS_News_Adminhtml_NewsController<\/em>. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0430\u0434\u043c\u0438\u043d\u043a\u0430 \u043c\u043e\u0434\u0443\u043b\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <em>http:\/\/site.com\/index.php\/dsnews_admin\/adminhtml_news\/index\/<\/em>.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435, Magento \u043e\u0442\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043c\u043e\u0434\u0443\u043b\u044f \u0438\u0437-\u0437\u0430 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u041b\u044e\u0431\u043e\u0439 \u0430\u0434\u0440\u0435\u0441 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043a\u043b\u044e\u0447, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0430\u0434\u043c\u0438\u043d\u043a\u0438. \u041f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0430\u0434\u043c\u0438\u043d\u043a\u0435 \u0432 \u043f\u0443\u043d\u043a\u0442\u0435 3 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u0432 \u043c\u0435\u043d\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0441 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0443\u043d\u043a\u0442\u044b 4 \u0438 5, \u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0437\u0430\u0439\u0442\u0438 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0430\u0434\u043c\u0438\u043d\u043a\u0438, \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0442\u0438\u043f\u0430 <em>\u00abWarning: include(Mage\\DS\\News\\Helper\\Data.php): failed to open stream: No such file or directory&#8230;\u00bb<\/em>. \u0414\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u043d\u044e Magento \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0445\u0435\u043b\u043f\u0435\u0440 \u043c\u043e\u0434\u0443\u043b\u044f, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <em>module<\/em> \u0432 \u0443\u0437\u043b\u0435 <em>config\/adminhtml\/menu\/[menu]<\/em>. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 \u043c\u043e\u0434\u0443\u043b\u044f \u0445\u0435\u043b\u043f\u0435\u0440\u0430 <em>config\/global\/helpers\/[helper]<\/em>, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 \u0445\u0435\u043b\u043f\u0435\u0440\u0430. \u041f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0432 \u043f\u0443\u043d\u043a\u0442\u0435 4 \u0438 5 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0445\u0435\u043b\u043f\u0435\u0440-\u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043f\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u043c\u0443 \u043f\u0443\u0442\u0438.<\/p>\n<p>  \u0415\u0449\u0451 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0439 \u0440\u043e\u0443\u0442\u0435\u0440\u043e\u0432 \u0438 <em>frontName<\/em> \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 <em>config\/admin\/routers<\/em> \u043e\u0442 \u0442\u0430\u043a\u0438\u0445 \u0436\u0435 \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 <em>config\/frontend\/routers<\/em>. \u041f\u0440\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439<br \/>  (\u0430 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u0438\u0441\u043a\u0443\u0448\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442), \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u0441\u0435\u0441\u0441\u0438\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u0430\u043c\u0438 \u043c\u043e\u0434\u0443\u043b\u044f \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 HTTPS \u043d\u0430 \u0441\u0430\u0439\u0442\u0435.<\/p><\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0428\u0430\u0433 10. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u043e\u0432 \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435<\/b><\/p>\n<div class=\"spoiler_text\">\u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u0448\u0430\u0433\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0431\u043b\u043e\u043a \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0430\u0434\u043c\u0438\u043d\u043a\u0438 \u043a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0430\u0434\u043c\u0438\u043d\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0438 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0444\u043e\u0440\u043c.<\/p>\n<ol>\n<li>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 <em>controllers\/Adminhtml\/NewsController.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Adminhtml_NewsController extends Mage_Adminhtml_Controller_Action {      public function indexAction()     {         $this-&gt;loadLayout();         $this-&gt;_setActiveMenu('dsnews');          $contentBlock = $this-&gt;getLayout()-&gt;createBlock('dsnews\/adminhtml_news');         $this-&gt;_addContent($contentBlock);         $this-&gt;renderLayout();     }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u043b\u043e\u043a <em>Block\/Adminhtml\/News.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Block_Adminhtml_News extends Mage_Adminhtml_Block_Abstract {      public function _toHtml()     {         return '&lt;h1&gt;News Module: Admin section&lt;\/h1&gt;';     }  } <\/code><\/pre>\n<p>  <\/li>\n<\/ol>\n<p>  Magento \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043b\u044e\u0431\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0448\u0430\u0431\u043b\u043e\u043d\u044b, \u043a\u0430\u043a \u0432 frontend (\u043d\u0430 \u0441\u0430\u0439\u0442\u0435), \u0442\u0430\u043a \u0438 \u0432 backend (\u0430\u0434\u043c\u0438\u043d\u043a\u0435) \u0447\u0430\u0441\u0442\u0438. \u041c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f .xml \u0444\u0430\u0439\u043b\u043e\u043c \u043c\u0430\u043a\u0435\u0442\u0430 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f\/\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u043e\u0432 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 (\u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043d\u0430 \u0448\u0430\u0433\u0435 5: \u00ab\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0445\u00bb), \u043e\u0434\u043d\u0430\u043a\u043e \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0430\u0434\u043c\u0438\u043d-\u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 \u0431\u043b\u043e\u043a\u043e\u0432 Magento, \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u0410 \u0432 \u0440\u0435\u0434\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043c\u043e\u0436\u043d\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c HTML \u00ab\u043d\u0430 \u043b\u0435\u0442\u0443\u00bb \u043f\u0440\u044f\u043c\u043e \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u0441\u0432\u043e\u0435\u0433\u043e \u0431\u043b\u043e\u043a\u0430. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435, \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0434\u043b\u044f \u0430\u0434\u043c\u0438\u043d\u043a\u0438 \u0438 \u0444\u0430\u0439\u043b\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0434\u0443\u043b\u044f \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 <em>\/app\/design\/adminhtml\/default\/default\/<\/em>, \u0447\u0442\u043e \u043d\u0435 \u0435\u0441\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u043e, \u0442.\u043a. \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0438\u0437\u043b\u0438\u0448\u043d\u0435\u043c\u0443 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044e \u043a\u043e\u0434\u0430 \u043c\u043e\u0434\u0443\u043b\u044f \u043f\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f\u043c.<\/p>\n<p>  \u0412 \u043f\u0443\u043d\u043a\u0442\u0435 1 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0430\u043a\u0435\u0442\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0430\u0434\u043c\u0438\u043d\u043a\u0438 <em>$this-&gt;loadLayout()<\/em> \u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0443\u043d\u043a\u0442\u0430 \u043c\u0435\u043d\u044e. \u041f\u043e\u0441\u043b\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0430\u043a\u0435\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u0443\u0436\u0435 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 \u043c\u0430\u043a\u0435\u0442\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <em>$this-&gt;getLayout()<\/em>: \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c\/\u0443\u0434\u0430\u043b\u044f\u0442\u044c\/\u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0431\u043b\u043e\u043a\u0438 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u0430 <em>createBlock<\/em> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0431\u043b\u043e\u043a\u0430 <em>[module]\/[block]<\/em> \u0442\u0430\u043a\u043e\u0433\u043e \u0436\u0435 \u0442\u0438\u043f\u0430, \u043a\u0430\u043a \u0438 \u0432 \u043c\u0430\u043a\u0435\u0442\u0435 <em>&lt;block type=&quot;[module]\/[block]&quot;<\/em> \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<br \/>  \u043a\u043b\u0430\u0441\u0441\u0430 \u0431\u043b\u043e\u043a\u0430; \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043c\u0430\u043a\u0435\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.<\/p><\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0428\u0430\u0433 11. \u0412\u044b\u0432\u043e\u0434 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432 Data Grid<\/b><\/p>\n<div class=\"spoiler_text\">\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430 \u0431\u043b\u043e\u043a\u0430 \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0443, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0433\u0440\u0438\u0434\u043e\u043c \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439.<\/p>\n<ol>\n<li>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0431\u043b\u043e\u043a <em>Block\/Adminhtml\/News.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Block_Adminhtml_News extends Mage_Adminhtml_Block_Widget_Grid_Container {      protected function _construct()     {         parent::_construct();          $helper = Mage::helper('dsnews');         $this-&gt;_blockGroup = 'dsnews';         $this-&gt;_controller = 'adminhtml_news';          $this-&gt;_headerText = $helper-&gt;__('News Management');         $this-&gt;_addButtonLabel = $helper-&gt;__('Add News');     }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u043b\u043e\u043a \u0433\u0440\u0438\u0434\u0430 <em>Block\/Adminhtml\/News\/Grid.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Block_Adminhtml_News_Grid extends Mage_Adminhtml_Block_Widget_Grid {      protected function _prepareCollection()     {         $collection = Mage::getModel('dsnews\/news')-&gt;getCollection();         $this-&gt;setCollection($collection);         return parent::_prepareCollection();     }      protected function _prepareColumns()     {          $helper = Mage::helper('dsnews');          $this-&gt;addColumn('news_id', array(             'header' =&gt; $helper-&gt;__('News ID'),             'index' =&gt; 'news_id'         ));          $this-&gt;addColumn('title', array(             'header' =&gt; $helper-&gt;__('Title'),             'index' =&gt; 'title',             'type' =&gt; 'text',         ));          $this-&gt;addColumn('created', array(             'header' =&gt; $helper-&gt;__('Created'),             'index' =&gt; 'created',             'type' =&gt; 'date',         ));          return parent::_prepareColumns();     }  } <\/code><\/pre>\n<p>  <\/li>\n<\/ol>\n<p>  \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 \u0431\u043b\u043e\u043a\u0430 \u0433\u0440\u0438\u0434\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0443\u043d\u043a\u0442\u0435 1 \u0432 \u0431\u043b\u043e\u043a\u0435 <em>DS_News_Block_Adminhtml_News<\/em>: <em>[_blockGroup]\/[_controller]_grid<\/em>, \u0433\u0434\u0435 <em>_blockGroup<\/em> \u2014 \u044d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 \u0431\u043b\u043e\u043a\u043e\u0432 \u043c\u043e\u0434\u0443\u043b\u044f <em>config\/global\/blocks\/[_blockGroup]<\/em>. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0442\u0438\u043f\u0430 \u0431\u043b\u043e\u043a\u0430 <em>\u00abdsnews\/adminhtml_news_grid\u00bb<\/em>.<\/p>\n<p>  \u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <em>_prepareColumns<\/em> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u043e\u043b\u043e\u043d\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0433\u0440\u0438\u0434\u0435. \u0424\u0443\u043d\u043a\u0446\u0438\u044f <em>addColumn<\/em> \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438, \u0430 \u0432\u0442\u043e\u0440\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u2014 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043e \u043a\u043e\u043b\u043e\u043d\u043a\u0435, \u0433\u0434\u0435 <em>index<\/em> \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 <em>type<\/em> \u2014 \u0442\u0438\u043f \u043a\u043e\u043b\u043e\u043d\u043a\u0438. \u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0438 \u043e\u043f\u0446\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 <em>Mage_Adminhtml_Block_Widget_Grid_Column<\/em>.<\/p><\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0428\u0430\u0433 12. \u041c\u0430\u0441\u0441\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432 Data Grid<\/b><\/p>\n<div class=\"spoiler_text\">\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439<\/p>\n<ol>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0431\u043b\u043e\u043a \u0433\u0440\u0438\u0434\u0430 <em>Block\/Adminhtml\/News\/Grid.php<\/em> \u043c\u0435\u0442\u043e\u0434 <em>_prepareMassaction<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Block_Adminhtml_News_Grid extends Mage_Adminhtml_Block_Widget_Grid {      protected function _prepareCollection(){ ... }      protected function _prepareColumns(){ ... }      protected function _prepareMassaction()     {         $this-&gt;setMassactionIdField('news_id');         $this-&gt;getMassactionBlock()-&gt;setFormFieldName('news');          $this-&gt;getMassactionBlock()-&gt;addItem('delete', array(             'label' =&gt; $this-&gt;__('Delete'),             'url' =&gt; $this-&gt;getUrl('*\/*\/massDelete'),         ));         return $this;     }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <em>massDeleteAction<\/em> \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 <em>controllers\/Adminhtml\/NewsController.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Adminhtml_NewsController extends Mage_Adminhtml_Controller_Action {      public function indexAction(){ ... }      public function massDeleteAction()     {         $news = $this-&gt;getRequest()-&gt;getParam('news', null);          if (is_array($news) && sizeof($news) &gt; 0) {             try {                 foreach ($news as $id) {                     Mage::getModel('dsnews\/news')-&gt;setId($id)-&gt;delete();                 }                 $this-&gt;_getSession()-&gt;addSuccess($this-&gt;__('Total of %d news have been deleted', sizeof($news)));             } catch (Exception $e) {                 $this-&gt;_getSession()-&gt;addError($e-&gt;getMessage());             }         } else {             $this-&gt;_getSession()-&gt;addError($this-&gt;__('Please select news'));         }         $this-&gt;_redirect('*\/*');     }  }  <\/code><\/pre>\n<p>  <\/li>\n<\/ol>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u043f\u0435\u0440\u0432\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u043e\u0439 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0447\u0435\u043a\u0431\u043e\u043a\u0441\u044b. \u041c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439, \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0432 \u043f\u0440\u0430\u0432\u043e\u043c \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0433\u043b\u0443 \u0441\u043f\u0438\u0441\u043a\u0430 <em>Actions<\/em> \u043e\u043f\u0446\u0438\u044e <em>Delete<\/em> \u0438 \u043d\u0430\u0436\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0443 <em>Submit<\/em> \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439.<\/p>\n<p>  \u0412 \u043f\u0443\u043d\u043a\u0442\u0435 1 \u043a\u043b\u0430\u0441\u0441\u0443 \u0433\u0440\u0438\u0434\u0430 \u0431\u044b\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043c\u0435\u0442\u043e\u0434 <em>_prepareMassaction<\/em>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f id-\u043f\u043e\u043b\u0435 <em>news_id<\/em>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 id-\u043f\u043e\u043b\u0435\u0439. \u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u043f\u0446\u0438\u0439 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u0430\u0441\u0441\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u2014 \u0430\u0439\u0434\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438 \u0441\u0441\u044b\u043b\u043a\u0430, \u043a\u0443\u0434\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438. \u041c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u0441\u0435\u043b\u0435\u043a\u0442\u044b: \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u0435\u043b\u0435\u043a\u0442. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432. \u041f\u0440\u0438\u043c\u0435\u0440 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0432 \u0432 \u043c\u0430\u0441\u0441\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u0433\u0440\u0438\u0434\u0430 <em>Mage_Adminhtml_Block_Catalog_Product_Grid<\/em>.<\/p><\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0428\u0430\u0433 13. CRUD: \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435<\/b><\/p>\n<div class=\"spoiler_text\">\u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0435\u0439<\/p>\n<ol>\n<li>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 <em>controllers\/Adminhtml\/NewsController.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Adminhtml_NewsController extends Mage_Adminhtml_Controller_Action {      public function indexAction()     {         $this-&gt;loadLayout()-&gt;_setActiveMenu('dsnews');         $this-&gt;_addContent($this-&gt;getLayout()-&gt;createBlock('dsnews\/adminhtml_news'));         $this-&gt;renderLayout();     }      public function newAction()     {         $this-&gt;_forward('edit');     }      public function editAction()     {         $id = (int) $this-&gt;getRequest()-&gt;getParam('id');         Mage::register('current_news', Mage::getModel('dsnews\/news')-&gt;load($id));          $this-&gt;loadLayout()-&gt;_setActiveMenu('dsnews');         $this-&gt;_addContent($this-&gt;getLayout()-&gt;createBlock('dsnews\/adminhtml_news_edit'));         $this-&gt;renderLayout();     }      public function saveAction()     {         if ($data = $this-&gt;getRequest()-&gt;getPost()) {             try {                 $model = Mage::getModel('dsnews\/news');                 $model-&gt;setData($data)-&gt;setId($this-&gt;getRequest()-&gt;getParam('id'));                 if(!$model-&gt;getCreated()){                     $model-&gt;setCreated(now());                 }                 $model-&gt;save();                  Mage::getSingleton('adminhtml\/session')-&gt;addSuccess($this-&gt;__('News was saved successfully'));                 Mage::getSingleton('adminhtml\/session')-&gt;setFormData(false);                 $this-&gt;_redirect('*\/*\/');             } catch (Exception $e) {                 Mage::getSingleton('adminhtml\/session')-&gt;addError($e-&gt;getMessage());                 Mage::getSingleton('adminhtml\/session')-&gt;setFormData($data);                 $this-&gt;_redirect('*\/*\/edit', array(                     'id' =&gt; $this-&gt;getRequest()-&gt;getParam('id')                 ));             }             return;         }         Mage::getSingleton('adminhtml\/session')-&gt;addError($this-&gt;__('Unable to find item to save'));         $this-&gt;_redirect('*\/*\/');     }      public function deleteAction()     {         if ($id = $this-&gt;getRequest()-&gt;getParam('id')) {             try {                 Mage::getModel('dsnews\/news')-&gt;setId($id)-&gt;delete();                 Mage::getSingleton('adminhtml\/session')-&gt;addSuccess($this-&gt;__('News was deleted successfully'));             } catch (Exception $e) {                 Mage::getSingleton('adminhtml\/session')-&gt;addError($e-&gt;getMessage());                 $this-&gt;_redirect('*\/*\/edit', array('id' =&gt; $id));             }         }         $this-&gt;_redirect('*\/*\/');     }      public function massDeleteAction(){ ... }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <em>getRowUrl<\/em> \u0432 \u0431\u043b\u043e\u043a \u0433\u0440\u0438\u0434\u0430 <em>Block\/Adminhtml\/News\/Grid.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Block_Adminhtml_News_Grid extends Mage_Adminhtml_Block_Widget_Grid {      protected function _prepareCollection(){ ... }      protected function _prepareColumns(){ ... }      protected function _prepareMassaction(){ ... }      public function getRowUrl($model)     {         return $this-&gt;getUrl('*\/*\/edit', array(                     'id' =&gt; $model-&gt;getId(),                 ));     }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u043b\u043e\u043a \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u0438 <em>Block\/Adminhtml\/News\/Edit.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Block_Adminhtml_News_Edit extends Mage_Adminhtml_Block_Widget_Form_Container {      protected function _construct()     {         $this-&gt;_blockGroup = 'dsnews';         $this-&gt;_controller = 'adminhtml_news';     }      public function getHeaderText()     {         $helper = Mage::helper('dsnews');         $model = Mage::registry('current_news');          if ($model-&gt;getId()) {             return $helper-&gt;__(&quot;Edit News item '%s'&quot;, $this-&gt;escapeHtml($model-&gt;getTitle()));         } else {             return $helper-&gt;__(&quot;Add News item&quot;);         }     }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u043b\u043e\u043a \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0444\u043e\u0440\u043c\u044b <em>Block\/Adminhtml\/News\/Edit\/Form.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Block_Adminhtml_News_Edit_Form extends Mage_Adminhtml_Block_Widget_Form {      protected function _prepareForm()     {         $helper = Mage::helper('dsnews');         $model = Mage::registry('current_news');          $form = new Varien_Data_Form(array(                     'id' =&gt; 'edit_form',                     'action' =&gt; $this-&gt;getUrl('*\/*\/save', array(                         'id' =&gt; $this-&gt;getRequest()-&gt;getParam('id')                     )),                     'method' =&gt; 'post',                     'enctype' =&gt; 'multipart\/form-data'                 ));          $this-&gt;setForm($form);          $fieldset = $form-&gt;addFieldset('news_form', array('legend' =&gt; $helper-&gt;__('News Information')));          $fieldset-&gt;addField('title', 'text', array(             'label' =&gt; $helper-&gt;__('Title'),             'required' =&gt; true,             'name' =&gt; 'title',         ));          $fieldset-&gt;addField('content', 'editor', array(             'label' =&gt; $helper-&gt;__('Content'),             'required' =&gt; true,             'name' =&gt; 'content',         ));          $fieldset-&gt;addField('created', 'date', array(             'format' =&gt; Mage::app()-&gt;getLocale()-&gt;getDateFormat(Mage_Core_Model_Locale::FORMAT_TYPE_SHORT),             'image' =&gt; $this-&gt;getSkinUrl('images\/grid-cal.gif'),             'label' =&gt; $helper-&gt;__('Created'),             'name' =&gt; 'created'         ));          $form-&gt;setUseContainer(true);          if($data = Mage::getSingleton('adminhtml\/session')-&gt;getFormData()){             $form-&gt;setValues($data);         } else {             $form-&gt;setValues($model-&gt;getData());         }          return parent::_prepareForm();     }  } <\/code><\/pre>\n<p>  <\/li>\n<\/ol>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438 \u043a\u043b\u0438\u043a\u0435 \u043d\u0430 \u043d\u043e\u0432\u043e\u0441\u0442\u044c \u0432 Data Grid \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0444\u043e\u0440\u043c\u0430 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u043f\u0440\u0438 \u043a\u043b\u0438\u043a\u0435 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 <em>Add News<\/em> \u2014 \u0444\u043e\u0440\u043c\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<p>  \u0412 \u043f\u0443\u043d\u043a\u0442\u0435 1 \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0431\u044b\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043c\u0435\u0442\u043e\u0434\u044b <em>new<\/em>, <em>edit<\/em>, <em>save<\/em> \u0438 <em>delete<\/em>, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0435 \u0437\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0422\u0430\u043a \u043a\u0430\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 <em>new<\/em> \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 <em>edit<\/em>, \u0442\u043e \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 <em>new<\/em> \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442 \u043d\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 <em>edit<\/em>. \u0412\u043d\u0443\u0442\u0440\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u043e\u0432\u043e\u0441\u0442\u0438, \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0435\u0441\u0442\u0440 (\u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0442\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u043a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0435\u0441\u0442\u0440\u0430 \u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u0438\u0437 \u0437\u043e\u043b), \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u043b\u043e\u043a \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0421\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 <em>save<\/em> \u043d\u0430<br \/>  \u0441\u0442\u0440\u043e\u043a\u0443 <em>$model-&gt;setData($data)-&gt;setId(&#8230;)<\/em> \u2014 \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0443 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0430\u0439\u0434\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0441\u043b\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0442.\u043a. \u0435\u0441\u043b\u0438 \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0430\u0439\u0434\u0438, \u0442\u043e \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 <em>setData<\/em> \u0430\u0439\u0434\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0437\u0430\u0442\u0451\u0440\u0442. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0437\u0430\u043f\u0438\u0441\u0438, \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u043d\u043e\u0432\u0430\u044f.<\/p>\n<p>  \u0412 \u043f\u0443\u043d\u043a\u0442\u0435 2 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0441\u0442\u0440\u043e\u043a Data Grid \u2014 \u0440\u0435\u0430\u043a\u0446\u0438\u044f \u043d\u0430 \u043a\u043b\u0438\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435. \u0412 \u043f\u0443\u043d\u043a\u0442\u0435 3 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0431\u043b\u043e\u043a \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u0438, \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u0441\u0430\u043c\u043e\u0439 \u0444\u043e\u0440\u043c\u044b \u043f\u043e \u0441\u0445\u0435\u043c\u0435 <em>[_blockGroup]\/[_controller]_[_mode]_form<\/em>, \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f<br \/>  <em>dsnews\/adminhtml_news_edit_form<\/em> (<em>_mode<\/em> \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <em>edit<\/em>).<\/p>\n<p>  \u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u043f\u0443\u043d\u043a\u0442\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0430\u043c\u043e\u0439 \u0444\u043e\u0440\u043c\u044b \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439. \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0444\u043e\u0440\u043c\u044b <em>new Varien_Data_Form<\/em> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <em>id<\/em> \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 HTML id \u0444\u043e\u0440\u043c\u044b \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435, \u0442.\u043a. \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0444\u043e\u0440\u043c\u044b \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 JavaScript-\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0430\u0439\u0434\u0438. \u041f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u0435\u0439 \u043d\u0430 \u0444\u043e\u0440\u043c\u0443 \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <em>name<\/em> \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u043b\u043e \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u043f\u043e\u043b\u0435\u0439 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p><\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0428\u0430\u0433 14. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u043a\u043b\u0430\u0434\u043e\u043a (tabs)<\/b><\/p>\n<div class=\"spoiler_text\">\u041f\u0440\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0443 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u0435\u0439, \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 TAB-\u0430\u0445.<\/p>\n<ol>\n<li>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 <em>controllers\/Adminhtml\/NewsController.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Adminhtml_NewsController extends Mage_Adminhtml_Controller_Action {      public function indexAction(){ ... }      public function newAction(){ ... }      public function editAction()     {         $id = (int) $this-&gt;getRequest()-&gt;getParam('id');         $model = Mage::getModel('dsnews\/news');          if($data = Mage::getSingleton('adminhtml\/session')-&gt;getFormData()){             $model-&gt;setData($data)-&gt;setId($id);         } else {             $model-&gt;load($id);         }         Mage::register('current_news', $model);          $this-&gt;loadLayout()-&gt;_setActiveMenu('dsnews');         $this-&gt;_addLeft($this-&gt;getLayout()-&gt;createBlock('dsnews\/adminhtml_news_edit_tabs'));         $this-&gt;_addContent($this-&gt;getLayout()-&gt;createBlock('dsnews\/adminhtml_news_edit'));         $this-&gt;renderLayout();     }      public function saveAction(){ ... }      public function deleteAction() { ... }      public function massDeleteAction(){ ... }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u043b\u043e\u043a \u0441 \u0432\u043a\u043b\u0430\u0434\u043a\u0430\u043c\u0438 <em>Block\/Adminhtml\/News\/Edit\/Tabs.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Block_Adminhtml_News_Edit_Tabs extends Mage_Adminhtml_Block_Widget_Tabs {      public function __construct()     {         $helper = Mage::helper('dsnews');          parent::__construct();         $this-&gt;setId('news_tabs');         $this-&gt;setDestElementId('edit_form');         $this-&gt;setTitle($helper-&gt;__('News Information'));     }      protected function _prepareLayout()     {         $helper = Mage::helper('dsnews');          $this-&gt;addTab('general_section', array(             'label' =&gt; $helper-&gt;__('General Information'),             'title' =&gt; $helper-&gt;__('General Information'),             'content' =&gt; $this-&gt;getLayout()-&gt;createBlock('dsnews\/adminhtml_news_edit_tabs_general')-&gt;toHtml(),         ));         $this-&gt;addTab('custom_section', array(             'label' =&gt; $helper-&gt;__('Custom Fields'),             'title' =&gt; $helper-&gt;__('Custom Fields'),             'content' =&gt; $this-&gt;getLayout()-&gt;createBlock('dsnews\/adminhtml_news_edit_tabs_custom')-&gt;toHtml(),         ));         return parent::_prepareLayout();     }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0431\u043b\u043e\u043a \u0444\u043e\u0440\u043c\u044b <em>Block\/Adminhtml\/News\/Edit\/Form.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Block_Adminhtml_News_Edit_Form extends Mage_Adminhtml_Block_Widget_Form {      protected function _prepareForm()     {         $form = new Varien_Data_Form(array(                     'id' =&gt; 'edit_form',                     'action' =&gt; $this-&gt;getUrl('*\/*\/save', array(                         'id' =&gt; $this-&gt;getRequest()-&gt;getParam('id')                     )),                     'method' =&gt; 'post',                     'enctype' =&gt; 'multipart\/form-data'                 ));          $form-&gt;setUseContainer(true);         $this-&gt;setForm($form);          return parent::_prepareForm();     }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0431\u043b\u043e\u043a \u0432\u043a\u043b\u0430\u0434\u043a\u0438 General <em>Block\/Adminhtml\/News\/Edit\/Tabs\/General.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Block_Adminhtml_News_Edit_Tabs_General extends Mage_Adminhtml_Block_Widget_Form {      protected function _prepareForm()     {          $helper = Mage::helper('dsnews');         $model = Mage::registry('current_news');           $form = new Varien_Data_Form();         $fieldset = $form-&gt;addFieldset('general_form', array(                     'legend' =&gt; $helper-&gt;__('General Information')                 ));          $fieldset-&gt;addField('title', 'text', array(             'label' =&gt; $helper-&gt;__('Title'),             'required' =&gt; true,             'name' =&gt; 'title',         ));          $fieldset-&gt;addField('content', 'editor', array(             'label' =&gt; $helper-&gt;__('Content'),             'required' =&gt; true,             'name' =&gt; 'content',         ));          $fieldset-&gt;addField('created', 'date', array(             'format' =&gt; Mage::app()-&gt;getLocale()-&gt;getDateFormat(Mage_Core_Model_Locale::FORMAT_TYPE_SHORT),             'image' =&gt; $this-&gt;getSkinUrl('images\/grid-cal.gif'),             'label' =&gt; $helper-&gt;__('Created'),             'name' =&gt; 'created'         ));          $form-&gt;setValues($model-&gt;getData());         $this-&gt;setForm($form);          return parent::_prepareForm();     }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0431\u043b\u043e\u043a \u0432\u043a\u043b\u0430\u0434\u043a\u0438 Custom<br \/>  <em>Block\/Adminhtml\/News\/Edit\/Tabs\/Custom.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Block_Adminhtml_News_Edit_Tabs_Custom extends Mage_Adminhtml_Block_Widget {      protected function _toHtml()     {         return '&lt;h2&gt;Custom Fields&lt;\/h2&gt;';     }  } <\/code><\/pre>\n<p>  <\/li>\n<\/ol>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u0444\u043e\u0440\u043c\u044b \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0444\u043e\u0440\u043c\u0430 \u0441 \u0432\u043a\u043b\u0430\u0434\u043a\u0430\u043c\u0438. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435 \u0444\u043e\u0440\u043c\u044b \u043d\u0430 2 \u0432\u043a\u043b\u0430\u0434\u043a\u0438 \u2014 \u043e\u0434\u043d\u0430 \u0441 \u043f\u043e\u043b\u044f\u043c\u0438, \u0430 \u0434\u0440\u0443\u0433\u0430\u044f \u2014 \u0441 \u043b\u044e\u0431\u044b\u043c \u0434\u0440\u0443\u0433\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c. \u0415\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u043f\u043e\u043b\u044f \u043f\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u0432\u043a\u043b\u0430\u0434\u043a\u0430\u043c, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043a\u043b\u0430\u0434\u043a\u0443 General, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0436\u043d\u044b\u0435 \u043f\u043e\u043b\u044f.<\/p>\n<p>  \u041c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0444\u043e\u0440\u043c\u044b \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u0430 \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0442\u0430\u043c \u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u043b\u043e\u043a \u0432\u043a\u043b\u0430\u0434\u043e\u043a. \u0412 \u043f\u0443\u043d\u043a\u0442\u0435 2 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0431\u043b\u043e\u043a-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0432\u043a\u043b\u0430\u0434\u043e\u043a, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u043a\u043b\u0430\u0434\u043e\u043a \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <em>_prepareLayout<\/em>. \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u0438 \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u0430 \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u044b \u0432 \u0444\u043e\u0440\u043c\u0443 \u0432\u043a\u043b\u0430\u0434\u043a\u0438. \u041d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0435 General \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0439 \u0444\u043e\u0440\u043c\u044b <em>$form = new Varien_Data_Form()<\/em>, \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0444\u043e\u0440\u043c\u044b, \u0433\u0434\u0435 \u0432\u043a\u043b\u0430\u0434\u043a\u0438 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.<\/p><\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0428\u0430\u0433 15. \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/b><\/p>\n<div class=\"spoiler_text\">\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435.<\/p>\n<ol>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0431\u043b\u043e\u043a General <em>Block\/Adminhtml\/News\/Edit\/Tabs\/General.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Block_Adminhtml_News_Edit_Tabs_General extends Mage_Adminhtml_Block_Widget_Form {      protected function _prepareForm()     {          $helper = Mage::helper('dsnews');         $model = Mage::registry('current_news');           $form = new Varien_Data_Form();         $fieldset = $form-&gt;addFieldset('general_form', array('legend' =&gt; $helper-&gt;__('General Information')));          $fieldset-&gt;addField('title', 'text', array(             'label' =&gt; $helper-&gt;__('Title'),             'required' =&gt; true,             'name' =&gt; 'title',         ));          $fieldset-&gt;addField('content', 'editor', array(             'label' =&gt; $helper-&gt;__('Content'),             'required' =&gt; true,             'name' =&gt; 'content',         ));          $fieldset-&gt;addField('image', 'image', array(             'label' =&gt; $helper-&gt;__('Image'),             'name' =&gt; 'image',         ));          $fieldset-&gt;addField('created', 'date', array(             'format' =&gt; Mage::app()-&gt;getLocale()-&gt;getDateFormat(Mage_Core_Model_Locale::FORMAT_TYPE_SHORT),             'image' =&gt; $this-&gt;getSkinUrl('images\/grid-cal.gif'),             'label' =&gt; $helper-&gt;__('Created'),             'name' =&gt; 'created'         ));          $formData = array_merge($model-&gt;getData(), array('image' =&gt; $model-&gt;getImageUrl()));         $form-&gt;setValues($formData);         $this-&gt;setForm($form);          return parent::_prepareForm();     }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0445\u0435\u043b\u043f\u0435\u0440 <em>Helper\/Data.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Helper_Data extends Mage_Core_Helper_Abstract {      public function getImagePath($id = 0)     {         $path = Mage::getBaseDir('media') . '\/ds_news';         if ($id) {             return &quot;{$path}\/{$id}.jpg&quot;;         } else {             return $path;         }     }      public function getImageUrl($id = 0)     {         $url = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA) . 'ds_news\/';         if ($id) {             return $url . $id . '.jpg';         } else {             return $url;         }     }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a \u043c\u043e\u0434\u0435\u043b\u0438 <em>Model\/News.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Model_News extends Mage_Core_Model_Abstract {      protected function _construct()     {         parent::_construct();         $this-&gt;_init('dsnews\/news');     }      protected function _afterDelete()     {         $helper = Mage::helper('dsnews');         @unlink($helper-&gt;getImagePath($this-&gt;getId()));         return parent::_afterDelete();     }      public function getImageUrl()     {         $helper = Mage::helper('dsnews');         if ($this-&gt;getId() && file_exists($helper-&gt;getImagePath($this-&gt;getId()))) {             return $helper-&gt;getImageUrl();         }         return null;     }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 <em>controllers\/Adminhtml\/NewsController.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Adminhtml_NewsController extends Mage_Adminhtml_Controller_Action {      public function indexAction(){ ... }      public function newAction(){ ... }      public function editAction(){ ... }      public function saveAction()     {         $id = $this-&gt;getRequest()-&gt;getParam('id');         if ($data = $this-&gt;getRequest()-&gt;getPost()) {             try {                 $helper = Mage::helper('dsnews');                 $model = Mage::getModel('dsnews\/news');                  $model-&gt;setData($data)-&gt;setId($id);                 if (!$model-&gt;getCreated()) {                     $model-&gt;setCreated(now());                 }                 $model-&gt;save();                 $id = $model-&gt;getId();                  if (isset($_FILES['image']['name']) && $_FILES['image']['name'] != '') {                     $uploader = new Varien_File_Uploader('image');                     $uploader-&gt;setAllowedExtensions(array('jpg', 'jpeg'));                     $uploader-&gt;setAllowRenameFiles(false);                     $uploader-&gt;setFilesDispersion(false);                     $uploader-&gt;save($helper-&gt;getImagePath(), $id . '.jpg'); \/\/ Upload the image                 } else {                     if (isset($data['image']['delete']) && $data['image']['delete'] == 1) {                         @unlink($helper-&gt;getImagePath($id));                     }                 }                  Mage::getSingleton('adminhtml\/session')-&gt;addSuccess($this-&gt;__('News was saved successfully'));                 Mage::getSingleton('adminhtml\/session')-&gt;setFormData(false);                 $this-&gt;_redirect('*\/*\/');             } catch (Exception $e) {                 Mage::getSingleton('adminhtml\/session')-&gt;addError($e-&gt;getMessage());                 Mage::getSingleton('adminhtml\/session')-&gt;setFormData($data);                 $this-&gt;_redirect('*\/*\/edit', array(                     'id' =&gt; $id                 ));             }             return;         }         Mage::getSingleton('adminhtml\/session')-&gt;addError($this-&gt;__('Unable to find item to save'));         $this-&gt;_redirect('*\/*\/');     }      public function deleteAction(){ ... }      public function massDeleteAction(){ ... }  } <\/code><\/pre>\n<p>  <\/li>\n<\/ol>\n<p>  \u041a \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JPG, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 <em>\/media\/ds_news<\/em>, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u043c\u0435\u043d\u0438 \u0444\u0430\u0439\u043b\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0430\u0439\u0434\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435. \u0412 \u043c\u043e\u0434\u0435\u043b\u044c \u0431\u044b\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0434\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u2014 \u043e\u0434\u043d\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f URL \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0435\u0441\u043b\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u0435\u0442\u0441\u044f, \u0430 \u0432\u0442\u043e\u0440\u0430\u044f \u2014 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0441\u0442\u0438. \u0412 \u0444\u043e\u0440\u043c\u0443 \u0431\u044b\u043b\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u043f\u043e\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0430 \u043d\u0438\u0436\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u044b \u2014 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u044b\u043b\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u043f\u043e\u043b\u0435 <em>image<\/em>: <em>$formData = array_merge($model-&gt;getData(), array(&#8216;image&#8217; =&gt; $model-&gt;getImageUrl()))<\/em>.<\/p><\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0428\u0430\u0433 16. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 JavaScript\/CSS \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435<\/b><\/p>\n<div class=\"spoiler_text\">\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u043d\u0435\u043e\u0431\u043e\u0445\u0434\u0438\u043c\u044b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0438 \u0441\u0442\u0438\u043b\u0438 \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435<\/p>\n<ol>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b <em>\/skin\/adminhtml\/default\/default\/ds_news\/adminhtml\/scripts.js<\/em><br \/> \n<pre><code class=\"javascript\">console.log('DS News admin'); <\/code><\/pre>\n<p>  <\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b <em>\/skin\/adminhtml\/default\/default\/ds_news\/adminhtml\/styles.css<\/em><br \/> \n<pre><code class=\"css\">#general_form label {     color: #FF0000;     font-weight: bold; } <\/code><\/pre>\n<p>  <\/li>\n<li>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0438 \u0441\u0442\u0438\u043b\u0438 \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 <em>controllers\/Adminhtml\/NewsController.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Adminhtml_NewsController extends Mage_Adminhtml_Controller_Action {      public function indexAction(){ ... }      public function newAction(){ ... }      public function editAction()     {         $id = (int) $this-&gt;getRequest()-&gt;getParam('id');         $model = Mage::getModel('dsnews\/news');          if ($data = Mage::getSingleton('adminhtml\/session')-&gt;getFormData()) {             $model-&gt;setData($data)-&gt;setId($id);         } else {             $model-&gt;load($id);         }         Mage::register('current_news', $model);          $this-&gt;loadLayout()-&gt;_setActiveMenu('dsnews');          $this-&gt;getLayout()-&gt;getBlock('head')-&gt;addItem('skin_js', 'ds_news\/adminhtml\/scripts.js');         $this-&gt;getLayout()-&gt;getBlock('head')-&gt;addItem('skin_css', 'ds_news\/adminhtml\/styles.css');          $this-&gt;_addLeft($this-&gt;getLayout()-&gt;createBlock('dsnews\/adminhtml_news_edit_tabs'));         $this-&gt;_addContent($this-&gt;getLayout()-&gt;createBlock('dsnews\/adminhtml_news_edit'));         $this-&gt;renderLayout();     }      public function saveAction(){ ... }      public function deleteAction(){ ... }      public function massDeleteAction(){ ... }  } <\/code><\/pre>\n<p>  <\/li>\n<\/ol>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u0444\u043e\u0440\u043c\u044b \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0430 \u043d\u0430\u0434\u043f\u0438\u0441\u044c <strong>DS News admin<\/strong>, \u0430 \u0448\u0440\u0438\u0444\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u0441\u0442\u0430\u043d\u0435\u0442 \u0436\u0438\u0440\u043d\u044b\u043c \u0438 \u043a\u0440\u0430\u0441\u043d\u044b\u043c.<\/p>\n<p>  \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0438 \u0441\u0442\u0438\u043b\u0438, \u043a\u0430\u043a \u043d\u0430 \u0441\u0430\u0439\u0442\u0435, \u0442\u0430\u043a \u0438 \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0438\u0437 \u0434\u0432\u0443\u0445 \u043c\u0435\u0441\u0442: \u043b\u0438\u0431\u043e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f JS, \u043b\u0438\u0431\u043e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0442\u0435\u043c\u044b. \u0413\u0434\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0438 \u0441\u0442\u0438\u043b\u0438 \u2014 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0442\u0435\u043c\u0435 \u0430\u0434\u043c\u0438\u043d\u043a\u0438 <em>\/skin\/adminhtml\/default\/default\/<\/em> \u0438\u043b\u0438 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 <em>\/js\/<\/em> \u2014 \u0434\u0435\u043b\u043e \u0432\u043a\u0443\u0441\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430. \u041e\u0434\u043d\u0430\u043a\u043e, \u043f\u043e \u043c\u043d\u0435\u043d\u0438\u044e \u0430\u0432\u0442\u043e\u0440\u0430, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u043b\u0443\u0447\u0448\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 <em>\/js\/<\/em>,<br \/>  \u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0438 \u0441\u0442\u0438\u043b\u0438 \u2014 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0442\u0435\u043c\u044b.<\/p>\n<p>  \u0414\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0438 \u0441\u0442\u0438\u043b\u0435\u0439 \u043d\u0435 \u0438\u0437 \u0442\u0435\u043c\u044b, \u0430 \u0438\u0437 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 <em>\/js\/<\/em> \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0444\u0430\u0439\u043b\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0438 \u0441\u0442\u0438\u043b\u0435\u0439 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e <em>\/js\/<\/em> \u0438 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043a\u043e\u0434  <\/p>\n<pre><code class=\"php\">$this-&gt;getLayout()-&gt;getBlock('head')-&gt;addItem('skin_js', 'ds_news\/adminhtml\/scripts.js'); $this-&gt;getLayout()-&gt;getBlock('head')-&gt;addItem('skin_css', 'ds_news\/adminhtml\/styles.css'); <\/code><\/pre>\n<p>  \u043d\u0430  <\/p>\n<pre><code class=\"php\">$this-&gt;getLayout()-&gt;getBlock('head')-&gt;addJs('ds_news\/adminhtml\/scripts.js'); $this-&gt;getLayout()-&gt;getBlock('head')-&gt;addItem('js_css', 'ds_news\/adminhtml\/styles.css'); <\/code><\/pre>\n<\/p><\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0428\u0430\u0433 17. \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f: \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439 \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439<\/b><\/p>\n<div class=\"spoiler_text\">\u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0439\u043c\u0451\u043c\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u2014 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043c\u043e\u0434\u0443\u043b\u044f: \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439 \u043a \u043d\u043e\u0432\u043e\u0441\u0442\u044f\u043c. \u0414\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u0443 \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f, \u043b\u0438\u0431\u043e \u043d\u043e\u0432\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u0435\u0437 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438.<\/p>\n<ol>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u0438 <em>sql\/dsnews_setup\/upgrade-0.0.1-0.0.2.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  echo '&lt;h1&gt;Upgrade DS News to version 0.0.2&lt;\/h1&gt;'; exit;  $installer = $this; $tableCategories = $installer-&gt;getTable('dsnews\/table_categories'); $tableNews = $installer-&gt;getTable('dsnews\/table_news');  $installer-&gt;startSetup(); $installer-&gt;run(&quot;DROP TABLE IF EXISTS {$tableCategories}&quot;); $installer-&gt;run(&quot;CREATE TABLE {$tableCategories} (         `category_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,         `title` VARCHAR(255) NOT NULL,          PRIMARY KEY (`category_id`)     ) ENGINE=InnoDB DEFAULT CHARSET=utf8;&quot;);  $installer-&gt;run(&quot;ALTER TABLE {$tableNews}         ADD COLUMN `category_id` INT(11) UNSIGNED NOT NULL DEFAULT 0;&quot;);  $installer-&gt;endSetup();  <\/code><\/pre>\n<p>  <\/li>\n<li>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 <em>etc\/config.xml<\/em><br \/> \n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot; ?&gt; &lt;config&gt;     &lt;modules&gt;         &lt;DS_News&gt;             &lt;version&gt;0.0.2&lt;\/version&gt;         &lt;\/DS_News&gt;     &lt;\/modules&gt;     ...     &lt;global&gt;         ...         &lt;models&gt;             &lt;dsnews&gt;                 &lt;class&gt;DS_News_Model&lt;\/class&gt;                 &lt;resourceModel&gt;dsnews_resource&lt;\/resourceModel&gt;             &lt;\/dsnews&gt;             &lt;dsnews_resource&gt;                 &lt;class&gt;DS_News_Model_Resource&lt;\/class&gt;                 &lt;entities&gt;                     &lt;table_categories&gt;                         &lt;table&gt;ds_news_categories&lt;\/table&gt;                     &lt;\/table_categories&gt;                     &lt;table_news&gt;                         &lt;table&gt;ds_news_entities&lt;\/table&gt;                     &lt;\/table_news&gt;                 &lt;\/entities&gt;             &lt;\/dsnews_resource&gt;         &lt;\/models&gt;         ...     &lt;\/global&gt; &lt;\/config&gt; <\/code><\/pre>\n<p>  <\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 <em>Model\/Category.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Model_Category extends Mage_Core_Model_Abstract {      protected function _construct()     {         parent::_construct();         $this-&gt;_init('dsnews\/category');     }      protected function _afterDelete()     {         $resource = Mage::getSingleton('core\/resource');         $connection = $resource-&gt;getConnection('core_write');          $id = intval($this-&gt;getId());         $tableNews = $resource-&gt;getTableName('dsnews\/table_news');         $sql = &quot;UPDATE {$tableNews} SET `category_id` = NULL WHERE `category_id` = {$id}&quot;;          $connection-&gt;multiQuery($sql);          return parent::_afterDelete();     }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u043d\u0430 \u0444\u043e\u0440\u043c\u0443 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u0438 <em>Block\/Adminhtml\/News\/Edit\/Tabs\/General.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Block_Adminhtml_News_Edit_Tabs_General extends Mage_Adminhtml_Block_Widget_Form {      protected function _prepareForm()     {         ...          $fieldset-&gt;addField('category_id', 'select', array(             'label' =&gt; $helper-&gt;__('Category'),             'name' =&gt; 'category_id',             'values' =&gt; $helper-&gt;getCategoriesOptions(),         ));          ...     } } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0445\u0435\u043b\u043f\u0435\u0440 <em>Helper\/Data.php<\/em> \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439 \u0434\u043b\u044f \u0441\u0435\u043b\u0435\u043a\u0442\u0430 \u043d\u0430 \u0444\u043e\u0440\u043c\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439<br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Helper_Data extends Mage_Core_Helper_Abstract {      public function getImagePath($id = 0){ ... }      public function getImageUrl($id = 0){ ... }      public function getCategoriesList()     {         $categories = Mage::getModel('dsnews\/category')-&gt;getCollection()-&gt;load();         $output = array();         foreach($categories as $category){             $output[$category-&gt;getId()] = $category-&gt;getTitle();         }         return $output;     }      public function getCategoriesOptions()     {         $categories = Mage::getModel('dsnews\/category')-&gt;getCollection()-&gt;load();         $options = array();         $options[] = array(             'label' =&gt; '',             'value' =&gt; ''         );         foreach ($categories as $category) {             $options[] = array(                 'label' =&gt; $category-&gt;getTitle(),                 'value' =&gt; $category-&gt;getId(),             );         }         return $options;     }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u044b\u0432\u043e\u0434 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 <em>Block\/News\/Grid.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Block_Adminhtml_News_Grid extends Mage_Adminhtml_Block_Widget_Grid {      protected function _prepareCollection(){ ... }      protected function _prepareColumns()     {          $helper = Mage::helper('dsnews');          $this-&gt;addColumn('news_id', array(             'header' =&gt; $helper-&gt;__('News ID'),             'index' =&gt; 'news_id',             'width' =&gt; '100px',         ));          $this-&gt;addColumn('title', array(             'header' =&gt; $helper-&gt;__('Title'),             'index' =&gt; 'title',             'type' =&gt; 'text',         ));          $this-&gt;addColumn('category', array(             'header' =&gt; $helper-&gt;__('Category'),             'index' =&gt; 'category_id',             'options' =&gt; $helper-&gt;getCategoriesList(),             'type'  =&gt; 'options',             'width' =&gt; '150px',         ));          $this-&gt;addColumn('created', array(             'header' =&gt; $helper-&gt;__('Created'),             'index' =&gt; 'created',             'type' =&gt; 'date',         ));          return parent::_prepareColumns();     }      protected function _prepareMassaction(){ ... }      public function getRowUrl($model){ ... }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043c\u0435\u043d\u044e \u0430\u0434\u043c\u0438\u043d\u043a\u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 <em>etc\/config.xml<\/em><br \/> \n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot; ?&gt; &lt;config&gt;     ...     &lt;adminhtml&gt;         &lt;menu&gt;             &lt;dsnews module=&quot;dsnews&quot;&gt;                 &lt;title&gt;News&lt;\/title&gt;                 &lt;sort_order&gt;77&lt;\/sort_order&gt;                 &lt;children&gt;                     &lt;dsnews_news translate=&quot;title&quot; module=&quot;dsnews&quot;&gt;                         &lt;title&gt;News&lt;\/title&gt;                         &lt;sort_order&gt;10&lt;\/sort_order&gt;                         &lt;action&gt;dsnews_admin\/adminhtml_news&lt;\/action&gt;                     &lt;\/dsnews_news&gt;                     &lt;dsnews_category translate=&quot;title&quot; module=&quot;dsnews&quot;&gt;                         &lt;title&gt;Categories&lt;\/title&gt;                         &lt;sort_order&gt;20&lt;\/sort_order&gt;                         &lt;action&gt;dsnews_admin\/adminhtml_category&lt;\/action&gt;                     &lt;\/dsnews_category&gt;                 &lt;\/children&gt;             &lt;\/dsnews&gt;         &lt;\/menu&gt;     &lt;\/adminhtml&gt;     ... &lt;\/config&gt; <\/code><\/pre>\n<p>  <\/li>\n<\/ol>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u0441\u0430\u0439\u0442\u0430 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0434\u043f\u0438\u0441\u044c \u00abUpgrade DS News to version 0.0.2\u00bb, \u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0432\u0441\u0451 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u2014 \u043c\u043e\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0434\u0432\u0435 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043e\u043a\u043d\u043e \u0441 \u0441\u0430\u0439\u0442\u043e\u043c. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044e \u043c\u043e\u0434\u0443\u043b\u044f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 <em>core_resource<\/em> \u2014 \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u043a\u0438 <em>dsnews_setup<\/em> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c <em>0.0.1<\/em>.<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439, \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435 \u0434\u043b\u044f \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043a\u0430\u043a \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430. \u0414\u043b\u044f \u043d\u0435\u0442\u0435\u0440\u043f\u0435\u043b\u0438\u0432\u044b\u0445, \u043d\u0443\u0436\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u043a\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0448\u0430\u0433\u0430. \u0421\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043e\u0431\u043d\u0443\u043b\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439.<\/p><\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0428\u0430\u0433 18. \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 Data Grid \u0432\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0435<\/b><\/p>\n<div class=\"spoiler_text\">\u0415\u0441\u043b\u0438 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0448\u0430\u0433\u0435 \u0432\u0441\u0451 \u043f\u0440\u043e\u0448\u043b\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044e \u0441\u043f\u0438\u0441\u043a\u0430 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u0432\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0435 \u043f\u0440\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438<\/p>\n<ol>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043c\u043e\u0434\u0435\u043b\u044c \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 <em>Model\/Category.php<\/em> \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u0434\u0430\u043d\u043d\u043e\u0439 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438<br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Model_Category extends Mage_Core_Model_Abstract {      protected function _construct(){ ... }      protected function _afterDelete(){ ... }      public function getNewsCollection()     {         $collection = Mage::getModel('dsnews\/news')-&gt;getCollection();         $collection-&gt;addFieldToFilter('category_id', $this-&gt;getId());         return $collection;     }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u043a\u043b\u0430\u0434\u043a\u0443 <em>Block\/Adminhtml\/Category\/Edit\/Tabs\/News.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Block_Adminhtml_Category_Edit_Tabs_News extends Mage_Adminhtml_Block_Widget_Grid {      public function __construct()     {         parent::__construct();         $this-&gt;setId('categoryNewsGrid');         $this-&gt;setUseAjax(true);     }      protected function _prepareCollection()     {         $collection = Mage::registry('current_category')-&gt;getNewsCollection();         $this-&gt;setCollection($collection);         return parent::_prepareCollection();     }      protected function _prepareColumns()     {          $helper = Mage::helper('dsnews');          $this-&gt;addColumn('ajax_grid_news_id', array(             'header' =&gt; $helper-&gt;__('News ID'),             'index' =&gt; 'news_id',             'width' =&gt; '100px',         ));          $this-&gt;addColumn('ajax_grid_title', array(             'header' =&gt; $helper-&gt;__('Title'),             'index' =&gt; 'title',             'type' =&gt; 'text',         ));          $this-&gt;addColumn('ajax_grid_created', array(             'header' =&gt; $helper-&gt;__('Created'),             'index' =&gt; 'created',             'type' =&gt; 'date',         ));          return parent::_prepareColumns();     }      public function getGridUrl()     {         return $this-&gt;getUrl('*\/*\/news', array('_current' =&gt; true));     }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u043a\u043b\u0430\u0434\u043a\u0443 \u043d\u0430 \u0444\u043e\u0440\u043c\u0443 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 <em>Block\/Adminhtml\/Category\/Edit\/Tabs.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Block_Adminhtml_Category_Edit_Tabs extends Mage_Adminhtml_Block_Widget_Tabs {      public function __construct(){ ... }      protected function _prepareLayout()     {         $helper = Mage::helper('dsnews');          $this-&gt;addTab('general_section', array(             'label' =&gt; $helper-&gt;__('General Information'),             'title' =&gt; $helper-&gt;__('General Information'),             'content' =&gt; $this-&gt;getLayout()-&gt;createBlock('dsnews\/adminhtml_category_edit_tabs_general')-&gt;toHtml(),         ));         $this-&gt;addTab('news_section', array(             'class' =&gt; 'ajax',             'label' =&gt; $helper-&gt;__('News'),             'title' =&gt; $helper-&gt;__('News'),             'url' =&gt; $this-&gt;getUrl('*\/*\/news', array('_current' =&gt; true)),         ));          return parent::_prepareLayout();     }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 <em>controllers\/Adminhtml\/CategoryController.php<\/em> \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438<br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Adminhtml_CategoryController extends Mage_Adminhtml_Controller_Action {      public function indexAction(){ ... }      public function newAction(){ ... }      public function editAction(){ ... }      public function saveAction(){ ... }      public function deleteAction(){ ... }      public function newsAction()     {         $id = (int) $this-&gt;getRequest()-&gt;getParam('id');         $model = Mage::getModel('dsnews\/category')-&gt;load($id);         Mage::register('current_category', $model);          if (Mage::app()-&gt;getRequest()-&gt;isAjax()) {             $this-&gt;loadLayout();             echo $this-&gt;getLayout()-&gt;createBlock('dsnews\/adminhtml_category_edit_tabs_news')-&gt;toHtml();         }     }  } <\/code><\/pre>\n<p>  <\/li>\n<\/ol>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u0444\u043e\u0440\u043c\u044b \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438, \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432\u0441\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u043e\u0439 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0432 \u043d\u043e\u0432\u043e\u0439 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 \u00abNews\u00bb. \u0414\u043b\u044f \u043d\u043e\u0432\u043e\u0439 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u0438, \u043d\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438. \u0415\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442, \u0442\u043e \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0439 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438, \u0432\u043a\u043b\u0430\u0434\u043a\u0443 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c, \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0432 \u0431\u043b\u043e\u043a \u0442\u0430\u0431\u043e\u0432 \u0432 \u043f\u0443\u043d\u043a\u0442\u0435 3:  <\/p>\n<pre><code class=\"php\">&lt;?php  class DS_News_Block_Adminhtml_Category_Edit_Tabs extends Mage_Adminhtml_Block_Widget_Tabs {      public function __construct(){ ... }      protected function _prepareLayout()     {         $helper = Mage::helper('dsnews');         $category = Mage::registry('current_category');          $this-&gt;addTab('general_section', array(             'label' =&gt; $helper-&gt;__('General Information'),             'title' =&gt; $helper-&gt;__('General Information'),             'content' =&gt; $this-&gt;getLayout()-&gt;createBlock('dsnews\/adminhtml_category_edit_tabs_general')-&gt;toHtml(),         ));         if($category-&gt;getId()){             $this-&gt;addTab('news_section', array(                 'class' =&gt; 'ajax',                 'label' =&gt; $helper-&gt;__('News'),                 'title' =&gt; $helper-&gt;__('News'),                 'url' =&gt; $this-&gt;getUrl('*\/*\/news', array('_current' =&gt; true)),             ));         }          return parent::_prepareLayout();     }  } <\/code><\/pre>\n<p>  \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0432 \u0432\u0438\u0434\u0443, \u0447\u0442\u043e \u0430\u0439\u0434\u0438, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u0434\u043b\u044f \u0433\u0440\u0438\u0434\u0430 \u0432 \u043f\u0443\u043d\u043a\u0442\u0435 2 <em>$this-&gt;setId(&#8216;categoryNewsGrid&#8217;)<\/em>, \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043c\u0435\u043d\u0438 JavaScript \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0430\u0439\u0434\u0438 \u0433\u0440\u0438\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u044b, \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 JavaScript (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b \u0434\u0435\u0444\u0438\u0441\u0430).<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 <em>ajax_grid_<\/em> \u0443 \u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u0435\u0439 \u0433\u0440\u0438\u0434\u0430 \u0432 \u043f\u0443\u043d\u043a\u0442\u0435 2. \u0422\u0430\u043a \u043a\u0430\u043a \u0430\u044f\u043a\u0441 \u0433\u0440\u0438\u0434 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0444\u043e\u0440\u043c\u0443 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u043d\u0430 \u043f\u043e\u043b\u0435\u0439 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0433\u0440\u0438\u0434\u0430 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u043b\u0438 \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u043f\u043e\u043b\u0435\u0439 \u043d\u0430 \u0444\u043e\u0440\u043c\u0435, \u0438\u043d\u0430\u0447\u0435 \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0437\u0430\u0442\u0435\u0440\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f \u0444\u043e\u0440\u043c\u044b.<\/p>\n<p>  \u041f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0432\u043a\u043b\u0430\u0434\u043a\u0438 \u0441\u043f\u0438\u0441\u043a\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0430\u044f\u043a\u0441-\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441 <em>ajax<\/em> (\u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u0435\u043d) \u0438 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\/\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0430 \u0430\u044f\u043a\u0441 \u0437\u0430\u043f\u0440\u043e\u0441. \u042d\u0442\u0430 \u0436\u0435 \u0441\u0441\u044b\u043b\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <em>getGridUrl<\/em> \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u0433\u0440\u0438\u0434\u0430 \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0430\u044f\u043a\u0441-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <em>array(&#8216;_current&#8217; =&gt; true)<\/em>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u043f\u0440\u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0430 id \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u043f\u0440\u0438 \u0430\u044f\u043a\u0441 \u0437\u0430\u043f\u0440\u043e\u0441\u0435.<\/p><\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0428\u0430\u0433 19. \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0432 Data Grid \u0437\u0430\u043f\u0438\u0441\u0435\u0439<\/b><\/p>\n<div class=\"spoiler_text\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u0432\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438, \u043d\u043e \u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c\/\u0441\u043d\u044f\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441 \u0442\u0435\u0445 \u0438\u043b\u0438 \u0438\u043d\u044b\u0445 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u043f\u0440\u044f\u043c\u043e \u0432\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0435. \u0410 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438, \u0443 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0443\u044e. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u044e\u0442\u0441\u044f \u0430\u044f\u043a\u0441-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c, \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u044f. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043d\u0435 \u0432\u0441\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u044b \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438, \u0430 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0430\u0439\u0434\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u0433\u0434\u0435-\u0442\u043e \u043d\u0443\u0436\u043d\u043e. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 <em>Mage_Adminhtml_Block_Widget_Grid_Serializer<\/em>.<\/p>\n<ol>\n<li>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u0430\u0439\u043b <em>Block\/Adminhtml\/Category\/Edit\/Tabs\/News.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Block_Adminhtml_Category_Edit_Tabs_News extends Mage_Adminhtml_Block_Widget_Grid {      public function __construct()     {         parent::__construct();         $this-&gt;setDefaultFilter(array('ajax_grid_in_category' =&gt; 1));         $this-&gt;setId('categoryNewsGrid');         $this-&gt;setSaveParametersInSession(false);         $this-&gt;setUseAjax(true);     }      protected function _prepareCollection()     {         $collection = Mage::getModel('dsnews\/news')-&gt;getCollection();         $this-&gt;setCollection($collection);         return parent::_prepareCollection();     }      protected function _prepareColumns()     {         $helper = Mage::helper('dsnews');          $this-&gt;addColumn('ajax_grid_in_category', array(             'align' =&gt; 'center',             'header_css_class' =&gt; 'a-center',             'index' =&gt; 'news_id',             'type' =&gt; 'checkbox',             'values' =&gt; $this-&gt;getSelectedNews(),         ));          $this-&gt;addColumn('ajax_grid_news_id', array(             'header' =&gt; $helper-&gt;__('News ID'),             'index' =&gt; 'news_id',             'width' =&gt; '100px',         ));          $this-&gt;addColumn('ajax_grid_title', array(             'header' =&gt; $helper-&gt;__('Title'),             'index' =&gt; 'title',             'type' =&gt; 'text',         ));          $this-&gt;addColumn('ajax_grid_created', array(             'header' =&gt; $helper-&gt;__('Created'),             'index' =&gt; 'created',             'type' =&gt; 'date',         ));          return parent::_prepareColumns();     }      protected function _addColumnFilterToCollection($column)     {         if ($column-&gt;getId() == 'ajax_grid_in_category') {             $collection = $this-&gt;getCollection();             $selectedNews = $this-&gt;getSelectedNews();             if ($column-&gt;getFilter()-&gt;getValue()) {                 $collection-&gt;addFieldToFilter('news_id', array('in' =&gt; $selectedNews));             } elseif (!empty($selectedNews)) {                 $collection-&gt;addFieldToFilter('news_id', array('nin' =&gt; $selectedNews));             }         } else {             parent::_addColumnFilterToCollection($column);         }         return $this;     }      public function getGridUrl()     {         return $this-&gt;getUrl('*\/*\/news', array('_current' =&gt; true, 'grid_only' =&gt; 1));     }      public function getSelectedNews()     {         if (!isset($this-&gt;_data['selected_news'])) {             $selectedNews = Mage::app()-&gt;getRequest()-&gt;getParam('selected_news', null);             if(is_null($selectedNews) || !is_array($selectedNews)){                 $category = Mage::registry('current_category');                 $selectedNews = $category-&gt;getNewsCollection()-&gt;getAllIds();             }             $this-&gt;_data['selected_news'] = $selectedNews;         }         return $this-&gt;_data['selected_news'];     }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 <em>controllers\/Adminhtml\/CategoryController.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Adminhtml_CategoryController extends Mage_Adminhtml_Controller_Action {      public function indexAction(){ ... }       public function newAction(){ ... }      public function editAction(){ ... }      public function saveAction()     {         $id = $this-&gt;getRequest()-&gt;getParam('id');         if ($data = $this-&gt;getRequest()-&gt;getPost()) {             try {                 $helper = Mage::helper('dsnews');                 $model = Mage::getModel('dsnews\/category');                  $model-&gt;setData($data)-&gt;setId($id);                 $model-&gt;save();                  $categoryId = $model-&gt;getId();                 $categoryNews = $model-&gt;getNewsCollection()-&gt;getAllIds();                 if ($selectedNews = $this-&gt;getRequest()-&gt;getParam('selected_news', null)) {                     $selectedNews = Mage::helper('adminhtml\/js')-&gt;decodeGridSerializedInput($selectedNews);                 } else {                     $selectedNews = array();                 }                  $setCategory = array_diff($selectedNews, $categoryNews);                 $unsetCategory = array_diff($categoryNews, $selectedNews);                  foreach($setCategory as $id){                     Mage::getModel('dsnews\/news')-&gt;setId($id)-&gt;setCategoryId($categoryId)-&gt;save();                 }                 foreach($unsetCategory as $id){                     Mage::getModel('dsnews\/news')-&gt;setId($id)-&gt;setCategoryId(0)-&gt;save();                 }                  Mage::getSingleton('adminhtml\/session')-&gt;addSuccess($this-&gt;__('Category was saved successfully'));                 Mage::getSingleton('adminhtml\/session')-&gt;setFormData(false);                 $this-&gt;_redirect('*\/*\/');             } catch (Exception $e) {                 Mage::getSingleton('adminhtml\/session')-&gt;addError($e-&gt;getMessage());                 Mage::getSingleton('adminhtml\/session')-&gt;setFormData($data);                 $this-&gt;_redirect('*\/*\/edit', array(                     'id' =&gt; $id                 ));             }             return;         }         Mage::getSingleton('adminhtml\/session')-&gt;addError($this-&gt;__('Unable to find item to save'));         $this-&gt;_redirect('*\/*\/');     }      public function deleteAction(){ ... }      public function newsAction()     {         $id = (int) $this-&gt;getRequest()-&gt;getParam('id');         $model = Mage::getModel('dsnews\/category')-&gt;load($id);         $request = Mage::app()-&gt;getRequest();          Mage::register('current_category', $model);          if ($request-&gt;isAjax()) {              $this-&gt;loadLayout();             $layout = $this-&gt;getLayout();              $root = $layout-&gt;createBlock('core\/text_list', 'root', array('output' =&gt; 'toHtml'));              $grid = $layout-&gt;createBlock('dsnews\/adminhtml_category_edit_tabs_news');             $root-&gt;append($grid);              if (!$request-&gt;getParam('grid_only')) {                 $serializer = $layout-&gt;createBlock('adminhtml\/widget_grid_serializer');                 $serializer-&gt;initSerializerBlock($grid, 'getSelectedNews', 'selected_news', 'selected_news');                 $root-&gt;append($serializer);             }              $this-&gt;renderLayout();         }     }  } <\/code><\/pre>\n<p>  <\/li>\n<\/ol>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043f\u0443\u043d\u043a\u0442\u0430 1, \u0432\u043f\u0435\u0440\u0435\u0434\u0438 \u0431\u044b\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u043a\u0430 <em>ajax_grid_in_category<\/em>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u0437\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435\/\u0441\u043d\u044f\u0442\u0438\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 (\u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438\/\u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439\/\u0432\u0441\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u0438). \u041f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <em>_prepareCollection<\/em>, \u0430 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <em>_addColumnFilterToCollection<\/em>. \u041a\u043e\u0434 <em>$this-&gt;setDefaultFilter(array(&#8216;ajax_grid_in_category&#8217; =&gt; 1));<\/em> \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e (\u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438). \u0424\u0443\u043d\u043a\u0446\u0438\u044f <em>getSelectedNews<\/em> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0430\u0439\u0434\u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439, \u0435\u0441\u043b\u0438 \u0438\u043c\u0435\u044e\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442\u0441\u044f, \u0442\u043e \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438\u0448\u0435\u0434\u0448\u0438\u0445 POST-\u043e\u043c (\u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u0435\u043d\u044f\u043b \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435), \u0430 \u0437\u0430\u0442\u0435\u043c \u2014 \u0430\u0439\u0434\u0438 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438.<\/p>\n<p>  \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0442\u043e\u0436\u0435 \u043f\u0440\u0435\u0442\u0435\u0440\u043f\u0435\u0432\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439. \u0421\u0442\u0440\u043e\u043a\u0430 <em>$root = $layout-&gt;createBlock(&#8230;)<\/em> \u043f\u0435\u0440\u0435\u0437\u0430\u0442\u0438\u0440\u0430\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0431\u043b\u043e\u043a \u0448\u0430\u0431\u043b\u043e\u043d\u0430 <em>root<\/em>, \u0443\u0431\u0438\u0440\u0430\u044f \u0432\u0441\u0435 \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438. \u0417\u0430\u0442\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0431\u043b\u043e\u043a \u0433\u0440\u0438\u0434\u0430, \u0438, \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0440\u0438\u0448\u0451\u043b \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437, \u0442\u043e \u0435\u0449\u0451 \u0438 \u0431\u043b\u043e\u043a \u0434\u043b\u044f \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0432\u0441\u0435\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430.<\/p>\n<p>  \u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <em>initSerializerBlock<\/em> \u0431\u043b\u043e\u043a\u0430 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u0431\u043b\u043e\u043a\u0430 \u043a \u0433\u0440\u0438\u0434\u0443. \u0414\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 4 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430: \u0431\u043b\u043e\u043a \u0438\u043b\u0438 \u0438\u043c\u044f \u0433\u0440\u0438\u0434\u0430 \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0435, \u0438\u043c\u044f \u043c\u0435\u0442\u043e\u0434\u0430 \u0431\u043b\u043e\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0438\u043c\u044f \u0441\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0438\u043d\u043f\u0443\u0442\u0430 (\u044d\u0442\u043e \u0438\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438), \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0438\u0434\u0451\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <em>getSelectedNews<\/em> \u0432 \u0431\u043b\u043e\u043a\u0435 \u0433\u0440\u0438\u0434\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439.<\/p><\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0428\u0430\u0433 20. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0445 URL<\/b><\/p>\n<div class=\"spoiler_text\">\u0422\u0435\u043a\u0443\u0449\u0438\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u0432\u044b\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u043a\u0440\u0430\u0441\u0438\u0432\u043e \u2014 \u044d\u0442\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u043c\u043e, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0437\u043d\u0430\u043d\u0438\u044f HTML\/CSS \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u043a\u0443\u0441\u0430 \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u0430. \u0414\u0440\u0443\u0433\u043e\u0435 \u0434\u0435\u043b\u043e \u2014 \u0441\u0441\u044b\u043b\u043a\u0438. \u0421\u0441\u044b\u043b\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u043c\u0438, \u0432 \u043d\u0438\u0445 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043d\u043e\u0432\u043e\u0441\u0442\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0432\u043e\u0439 \u0440\u043e\u0443\u0442\u0435\u0440. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0440\u043e\u0443\u0442\u0435\u0440, \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e \u043c\u043e\u0434\u0443\u043b\u044f, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u043d\u043e\u0432\u043e\u0441\u0442\u044f\u043c \u043f\u043e\u043b\u0435 \u0434\u043b\u044f \u0441\u0441\u044b\u043b\u043a\u0438.<\/p>\n<ol>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f <em>sql\/dsnews_setup\/upgrade-0.0.2-0.0.3.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  echo '&lt;h1&gt;Upgrade DS News to version 0.0.3&lt;\/h1&gt;'; exit;  $installer = $this; $tableNews = $installer-&gt;getTable('dsnews\/table_news');  $installer-&gt;run(&quot;ALTER TABLE {$tableNews}         ADD COLUMN `link` VARCHAR(255) AFTER `title`;&quot;); $installer-&gt;run(&quot;ALTER TABLE {$tableNews}         ADD UNIQUE KEY (`link`);&quot;);  foreach (Mage::getModel('dsnews\/news')-&gt;getCollection() as $news) {     try {         $news-&gt;load($news-&gt;getId())-&gt;setDataChanges(true)-&gt;save();     } catch (Exception $e) {         $news-&gt;setId($news-&gt;getId())-&gt;setLink($news-&gt;getId())-&gt;save();     } }  $installer-&gt;endSetup(); <\/code><\/pre>\n<p>  <\/li>\n<li>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0434\u0443\u043b\u044f <em>etc\/config.xml<\/em><br \/> \n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot; ?&gt; &lt;config&gt;     &lt;modules&gt;         &lt;DS_News&gt;             &lt;version&gt;0.0.3&lt;\/version&gt;         &lt;\/DS_News&gt;     &lt;\/modules&gt;     ... &lt;\/config&gt; <\/code><\/pre>\n<p>  <\/li>\n<li>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0445\u0435\u043b\u043f\u0435\u0440 <em>Helper\/Data.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php class DS_News_Helper_Data extends Mage_Core_Helper_Abstract {      public function getImagePath($id = 0){ ... }      public function getImageUrl($id = 0){ ... }      public function getCategoriesList(){ ... }      public function getCategoriesOptions(){ ... }      public function prepareUrl($url)     {         return trim(preg_replace('\/-+\/', '-', preg_replace('\/[^a-z0-9]\/sUi', '-', strtolower(trim($url)))), '-');     }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u043e\u0432\u043e\u0441\u0442\u0438 <em>Model\/News.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Model_News extends Mage_Core_Model_Abstract {      protected function _construct(){ ... }      protected function _afterDelete(){ ... }      protected function _beforeSave()     {         $helper = Mage::helper('dsnews');          if (!$this-&gt;getData('link')) {             $this-&gt;setData('link', $helper-&gt;prepareUrl($this-&gt;getTitle()));         } else {             $this-&gt;setData('link', $helper-&gt;prepareUrl($this-&gt;getData('link')));         }         return parent::_beforeSave();     }      public function getImageUrl(){ ... }  } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0444\u043e\u0440\u043c\u0443 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u0438 <em>Block\/Adminhtml\/News\/Edit\/Tabs\/General.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Block_Adminhtml_News_Edit_Tabs_General extends Mage_Adminhtml_Block_Widget_Form {      protected function _prepareForm()     {         ...          $fieldset-&gt;addField('link', 'text', array(             'label' =&gt; $helper-&gt;__('Link'),             'name' =&gt; 'link',         ));          ...     } } <\/code><\/pre>\n<p>  <\/li>\n<li>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0434\u0443\u043b\u044f <em>etc\/config.xml<\/em><br \/> \n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot; ?&gt; &lt;config&gt;     ...     &lt;global&gt;         ...         &lt;events&gt;             &lt;controller_front_init_routers&gt;                 &lt;observers&gt;                     &lt;dsnews&gt;                         &lt;class&gt;DS_News_Controller_Router&lt;\/class&gt;                         &lt;method&gt;initControllerRouters&lt;\/method&gt;                     &lt;\/dsnews&gt;                 &lt;\/observers&gt;             &lt;\/controller_front_init_routers&gt;         &lt;\/events&gt;         ...     &lt;\/global&gt; &lt;\/config&gt; <\/code><\/pre>\n<p>  <\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b <em>Controller\/Router.php<\/em><br \/> \n<pre><code class=\"php\">&lt;?php  class DS_News_Controller_Router extends Mage_Core_Controller_Varien_Router_Abstract {      public function initControllerRouters($observer)     {         $front = $observer-&gt;getEvent()-&gt;getFront();         $front-&gt;addRouter('dsnews', $this);     }      public function match(Zend_Controller_Request_Http $request)     {         $identifier = trim($request-&gt;getPathInfo(), '\/');         $cmd = explode('\/', $identifier);          if ($cmd[0] == 'news') {             if (count($cmd) == 1) {                 return $this-&gt;_fillRequest($request);             } else {                 $model = Mage::getModel('dsnews\/news')-&gt;load($cmd[1], 'link');                 if ($model-&gt;getId()) {                     $params = array(                         'id' =&gt; $model-&gt;getId()                     );                     return $this-&gt;_fillRequest($request, $params, 'index', 'view');                 }             }         }         return false;     }      protected function _fillRequest($request, $cmd = array(), $controller = 'index', $action = 'index')     {         $request-&gt;setModuleName('news')                 -&gt;setControllerName($controller)                 -&gt;setActionName($action)                 -&gt;setParam('is_routed', 1);         if (is_array($cmd) && count($cmd)) {             foreach ($cmd as $key =&gt; $value) {                 $request-&gt;setParam($key, $value);             }         }          $request-&gt;setAlias(Mage_Core_Model_Url_Rewrite::REWRITE_REQUEST_PATH_ALIAS, $request-&gt;getPathInfo());         return true;     }  } <\/code><\/pre>\n<p>  <\/li>\n<\/ol>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u043e\u043a\u043d\u0430 \u0441\u0430\u0439\u0442\u0430 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0432\u0438\u0434\u043d\u0430 \u043d\u0430\u0434\u043f\u0438\u0441\u044c <strong>Upgrade DS News to version 0.0.3<\/strong>, \u0437\u043d\u0430\u0447\u0438\u0442 \u0432\u0441\u0451 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u2014 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0434\u043f\u0438\u0441\u044c, \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435. \u041f\u0443\u043d\u043a\u0442\u044b \u0441 1 \u043f\u043e 5 \u2014 \u044d\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f: \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f \u0441\u0441\u044b\u043b\u043a\u0438 \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439. \u0421\u0430\u043c \u0440\u043e\u0443\u0442\u0435\u0440 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u043f\u0443\u043d\u043a\u0442\u0435 7, \u0430 \u0432 \u043f\u0443\u043d\u043a\u0442\u0435 6 \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u043e\u0443\u0442\u0435\u0440\u043e\u0432 \u0441\u0430\u0439\u0442\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 <em>http:\/\/site.com\/news\/{news-link}<\/em><\/p>\n<p>  \u041f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442. \u0412 \u0444\u0430\u0439\u043b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044c \u0434\u043b\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u043e\u0443\u0442\u0435\u0440\u043e\u0432 <em>controller_front_init_routers<\/em>, \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043a \u0441\u043f\u0438\u0441\u043a\u0443 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u0430\u043c\u043e\u0433\u043e \u0440\u043e\u0443\u0442\u0435\u0440\u0430 <strong>$this<\/strong>: <em>$front-&gt;addRouter(&#8216;dsnews&#8217;, $this)<\/em>. \u0414\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 <em>Mage_Core_Controller_Varien_Router_Abstract<\/em>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0442\u043e\u0434 <em>match<\/em>. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043b\u0438\u0448\u043d\u044e\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0431\u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c \u0436\u0435 \u0441\u0430\u043c\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0435. \u0412\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <em>match<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0431\u043e\u0440\u043e\u043c URL. \u0422\u0443\u0442 \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0451, \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <em>true<\/em>, \u0442\u043e \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <em>false<\/em> \u0432\u0435\u0434\u0451\u0442 \u043a \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0440\u043e\u0443\u0442\u0435\u0440\u0430\u043c\u0438. \u041c\u0435\u0442\u043e\u0434 <em>_fillRequest<\/em> \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434, \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u043d\u044b\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043e\u0431\u0449\u0435\u0433\u043e \u043e\u0431\u044a\u0451\u043c\u0430 \u043a\u043e\u0434\u0430. <\/p>\n<p>  \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043a\u0440\u0430\u0441\u0441\u0438\u0432\u044b\u0445 \u0441\u0441\u044b\u043b\u043e\u043a \u0434\u043b\u044f \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439, \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043a\u0430\u043a \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430.<\/p><\/div>\n<\/div>\n<h3>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u0434\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0448\u0430\u0433\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b <a href=\"http:\/\/gromo.github.io\/public\/magento\/magento-first-steps.zip\">\u0442\u0443\u0442<\/a><\/h3>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/180555\/\"> http:\/\/habrahabr.ru\/post\/180555\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">\n<blockquote><p>\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u043e Magento \u043d\u0435 \u043f\u0438\u0448\u0438, \u0430 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u043c\u043d\u043e\u0433\u043e \ud83d\ude09 \u00a9 <a href=\"http:\/\/habrahabr.ru\/users\/jeje\/\">jeje<\/a><\/p><\/blockquote>\n<p>  \u041f\u0440\u0438 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 Magento, \u044f \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b \u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0435\u0439, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445, \u043e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435 \u043e\u043d\u0438 \u0434\u0430\u044e\u0442 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u00ab\u0441\u0434\u0435\u043b\u0430\u0439 \u0442\u043e, \u0441\u0434\u0435\u043b\u0430\u0439 \u044d\u0442\u043e \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0448\u044c \u044d\u0442\u043e\u00bb, \u043d\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u044f \u0437\u0430\u0447\u0435\u043c \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u0442 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0448\u0430\u0433. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u0440\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0447\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043d\u0435 \u0442\u0430\u043a, \u0442\u0430\u043a\u0436\u0435 \u0442\u0440\u0443\u0434\u043d\u0435\u0435 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u044b\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u043f\u043e\u0434 \u0441\u0432\u043e\u0438 \u043d\u0443\u0436\u0434\u044b.<\/p>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u043f\u044b\u0442\u0430\u044e\u0441\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e \u0441 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u00abDS News\u00bb, \u0433\u0434\u0435 DS \u2014 \u044d\u0442\u043e Namespace (\u041f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0451\u043d), \u0430 News \u2014 \u044d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f. \u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u043e\u044f\u0442\u044c\u0441\u044f \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0430 \u0438\u043c\u0451\u043d \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u043c\u043e\u0434\u0443\u043b\u0435\u0439. \u041e\u0441\u043e\u0431\u044b\u0439 \u0443\u043f\u043e\u0440 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0432 \u0444\u0430\u0439\u043b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0443\u0437\u043b\u043e\u0432 \u0438 \u043c\u0435\u0441\u0442\u0430, \u0433\u0434\u0435 \u043e\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f. \u0421\u0430\u043c \u044f \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u043c \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f, \u0442.\u043a. \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043e\u0442\u043a\u0443\u0434\u0430 \u043a\u0430\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0434\u0443\u0442, \u043a\u0430\u043a\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0438 \u0442.\u0434\u2026 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438. \u0410 \u0442\u0443\u0442 \u0432\u0441\u0451 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \ud83d\ude42<\/p>\n<p>  \u041d\u0435 \u0431\u0443\u0434\u0443 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 Magento \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0442\u043e\u0432\u0430\u0440\u0430\u043c\u0438, \u0441\u0447\u0438\u0442\u0430\u044f \u0447\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e (\u043a\u0435\u0448 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 <em>System\/Cache Management<\/em>) \u2014 \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0440\u0430\u0437\u0443 \u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-180555","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/180555","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=180555"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/180555\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=180555"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=180555"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=180555"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}