সুতরাং এটি চূড়ান্ত কোলাহল সৃষ্টি করবে এবং প্রতিটি ম্যাজেন্টো বিকাশকারীদের শস্যের বিরুদ্ধে যাবে - তবে আমরা তাদের উত্তোলনের জন্য একটি কঠিন প্রক্রিয়া পেয়েছি - যা লোকাল.এক্সএমএল ব্যবহার করে না ( এরপরে আরও) more
আমরা সর্বদা base/default
(এবং enterprise/default
ইই এর জন্য) টেমপ্লেটটি সরিয়ে রাখি - তবে সিএসএসের শূন্য। যদিও সমস্ত নকশাগুলি বিশেষত ভ্যানিলা ম্যাজেন্টো স্টোরের কাঠামোগত বিন্যাসে নিজেকে ঘৃণা করে না - default
থিমটিকে একটি প্রাথমিক পয়েন্ট হিসাবে ব্যবহার করা আমাদের ভাল অনুশীলন বলে মনে হয় ; আমরা টেম্পলেট করার সময় অপরিহার্য পদ্ধতি / লুপ / এইচটিএমএল ইত্যাদি অপসারণ করতে পারি।
কোনও থিম শুরু করার সময়
EE এর জন্য
আমরা প্রথমে এই এক্সটেনশনটি ইনস্টল করি , যাতে আমরা থিম ফ্যালব্যাকের একটি স্তর পেতে পারি - আমরা পরে যখন অনুলিপি করা থিম ফাইলগুলি সরিয়ে ফেলি।
প্যাকেজ
আমরা প্রথমে প্যাকেজ তৈরি করে পুরো base/default
থিমটিতে অনুলিপি করে শুরু করি ; সুতরাং উদাহরণস্বরূপ (বলুন এটি আমাদের নিজস্ব ওয়েবসাইট ছিল, আমরা প্যাকেজটি কল করব sonassi
)
cd ./app/design/frontend
mkdir sonassi
cp -par base/default sonassi/default
mkdir sonassi/default/layout/custom
টেম্পলেট
চূড়ান্ত লক্ষ্যটি হ'ল আমাদের যখনই দরকার আমাদের প্রতিটি ফাইলের অনুলিপি এবং আটকানো চলবে না, আমরা কেবল থিমটিতে ফাইলটি সম্পাদনা করি।
তবে প্রতিবার ফাইলটি সম্পাদনা করার সময় আমরা ম্যাজেন্টো কমার্স শিরোলেখগুলি সরিয়ে ফেলি - এবং ফাইলটিকে কাস্টম টেম্পলেট হিসাবে চিহ্নিত করতে একটি উপযুক্ত শিরোনাম / সনাক্তকারী যুক্ত করি, সাধারণত এমন কিছু ...
/*
* @category Template
* @package sonassi_default
* @copyright Copyright (c) 2013 Sonassi
*/
আমরা যখন চূড়ান্ত টেম্পলেটটি ক্লিন-আপ করি তখন এই শিরোনামটি একটি উদ্দেশ্য পরিবেশন করে। আমরা একটি recursive কি করতে হবে হিসাবে diff
উপর base/default/template
ডিরেক্টরি ও sonassi/default/template
করে delete কিছু পরিবর্তন করা হয় নি - ডিরেক্টরি।
এইভাবে, কেবলমাত্র পরিবর্তিত ফাইলগুলি রয়ে গেছে এবং সামগ্রিক প্যাকেজটি ন্যূনতম পরিবর্তিত ফাইলগুলিতে হ্রাস পেয়েছে।
লেআউট ফাইল
আমরা আমাদের নিজস্ব একটি স্ট্যান্ডার্ড কোর মডিউল ব্যবহার করি sonassi.core
। হ্যাঁ, আমরা সর্বদা একটি অনন্য শনাক্তকারীর সাথে মডিউল নামের স্থানের উপসর্গ রেখেছি - এটি বিরোধগুলি থামায় যেখানে অন্যান্য সংস্থাগুলি একই নামটি বেছে নিয়েছে (যেমন, ফিশপিগ / ওয়ার্ডপ্রেস এবং সোনাসি / ওয়ার্ডপ্রেস)
নোলোকাল বিন্যাস পদ্ধতি
<core>
<rewrite>
<layout>Sonassi_Core_Model_Core_Layout</layout>
<layout_update>Sonassi_Core_Model_Core_Layout_Update</layout_update>
</rewrite>
</core>
তারপরে দুটি যাদু ক্লাস যা ক্রিয়াকলাপটি যুক্ত করে তাদের আর কখনও প্রয়োজন local.xml
হয় না,
class Sonassi_Core_Model_Core_Layout
extends Mage_Core_Model_Layout
{
/**
* Loyout xml generation
*
* @return Mage_Core_Model_Layout
*/
public function generateXml()
{
$xml = $this->getUpdate()->asSimplexml();
$removeInstructions = $xml->xpath("//remove");
if (is_array($removeInstructions)) {
foreach ($removeInstructions as $infoNode) {
$attributes = $infoNode->attributes();
$blockName = (string)$attributes->name;
if ($blockName) {
$unremoveNodes = $xml->xpath("//unremove[@name='".$blockName."']");
if (is_array($unremoveNodes) && count($unremoveNodes) > 0) {
continue;
}
$ignoreNodes = $xml->xpath("//block[@name='".$blockName."']");
if (!is_array($ignoreNodes)) {
continue;
}
$ignoreReferences = $xml->xpath("//reference[@name='".$blockName."']");
if (is_array($ignoreReferences)) {
$ignoreNodes = array_merge($ignoreNodes, $ignoreReferences);
}
foreach ($ignoreNodes as $block) {
if ($block->getAttribute('ignore') !== null) {
continue;
}
$acl = (string)$attributes->acl;
if ($acl && Mage::getSingleton('admin/session')->isAllowed($acl)) {
continue;
}
if (!isset($block->attributes()->ignore)) {
$block->addAttribute('ignore', true);
}
}
}
}
}
$this->setXml($xml);
return $this;
}
}
এবং
class Sonassi_Core_Model_Core_Layout_Update
extends Mage_Core_Model_Layout_Update
{
public function getFileLayoutUpdatesXml($area, $package, $theme, $storeId = null)
{
if (null === $storeId) {
$storeId = Mage::app()->getStore()->getId();
}
/* @var $design Mage_Core_Model_Design_Package */
$design = Mage::getSingleton('core/design_package');
$layoutXml = null;
$elementClass = $this->getElementClass();
$updatesRoot = Mage::app()->getConfig()->getNode($area.'/layout/updates');
Mage::dispatchEvent('core_layout_update_updates_get_after', array('updates' => $updatesRoot));
$updateFiles = array();
foreach ($updatesRoot->children() as $updateNode) {
if ($updateNode->file) {
$module = $updateNode->getAttribute('module');
if ($module && Mage::getStoreConfigFlag('advanced/modules_disable_output/' . $module, $storeId)) {
continue;
}
$updateFiles[] = (string)$updateNode->file;
// custom theme XML contents
$updateFiles[] = 'custom/'.(string)$updateNode->file;
// custom theme XML override
$updateFiles[] = 'local/'.(string)$updateNode->file;
}
}
// custom local layout updates file - load always last
$updateFiles[] = 'local.xml';
$layoutStr = '';
foreach ($updateFiles as $file) {
$filename = $design->getLayoutFilename($file, array(
'_area' => $area,
'_package' => $package,
'_theme' => $theme
));
if (!is_readable($filename)) {
continue;
}
$fileStr = file_get_contents($filename);
$fileStr = str_replace($this->_subst['from'], $this->_subst['to'], $fileStr);
$fileXml = simplexml_load_string($fileStr, $elementClass);
if (!$fileXml instanceof SimpleXMLElement) {
continue;
}
$layoutStr .= $fileXml->innerXml();
}
$layoutXml = simplexml_load_string('<layouts>'.$layoutStr.'</layouts>', $elementClass);
return $layoutXml;
}
}
উপরের দুটি শ্রেণি ম্যাজেন্টোতে কার্যকারিতা যুক্ত করে যাতে আপনি প্রসারিত করতে পারেন - তবে কোনও বিন্যাসের এক্সএমএল ফাইল ওভাররাইট করতে পারেন না। এক্সএমএল লেআউটটির সম্প্রসারণযোগ্যতা আমাদের পক্ষে গুরুত্বপূর্ণ, কারণ এটি আমাদের এখনও একই ফাইলের বিচ্ছিন্নতা বজায় রাখতে দেয় catalog.xml
,cms.xml
ইত্যাদি - কিন্তু শুধুমাত্র লেআউট এক্সএমএল সংক্ষিপ্ত অংশ যোগ করার জন্য অবরোধের (ঢোকান / ক্লোন / Remove) নিপূণভাবে করতে হবে।
local.xml
পদ্ধতি আপনি মাত্র এক কষ্টকর দুর্দমনীয় ফাইলে আপনার অগ্রাহ্য পরিবর্তন প্রবেশ করুন।
nolocal
পদ্ধতি মানে যে বরং একটি একক ফাইলের মধ্যে সকল পরিবর্তন নির্বাণ পরিবর্তে, আপনি তাদের একটি ফাইলে উপযুক্ত ফাইলের নাম করা এটি পরিবর্তন করা হয় (যেমন। catalog.xml
) - কেবল একটি নতুন ফাইল তৈরি করে sonassi/default/layout/custom/catalog.xml
- * সঙ্গে শুধুমাত্র পরিবর্তন ।
আবার, একবার আমরা টেমপ্লেটটি তৈরি করার পরে, কেবলমাত্র sonassi/default/layout
ব্যতিক্রমগুলি সহ আমরা সামগ্রীগুলি সরাতে পারিcustom
ডিরেক্টরি । এইভাবে আবার, টেমপ্লেটের মতো, আমাদেরও লাইটওয়েট প্রসারিত টেম্পলেট রয়েছে - বেস টেমপ্লেটগুলি বন্ধ করে দেওয়া।
স্টাইল শীট
আমরা সেগুলি মুছে ফেললাম। আমরা আমাদের প্যাকেজের সিএসএস ডিরেক্টরিতে সেগুলি অনুলিপি করা বিরক্ত করি না। আমরা জেএসে অনুলিপি করব এবং এটি হ'ল - images
এবং CSS
ডিরেক্টরিটি প্রথম থেকেই খালি থাকবে।
যেহেতু আমরা আজকাল SASS ব্যবহার করছি, আমাদের scss
প্রাক-প্রক্রিয়াজাত CSS এর জন্য অন্য একটি ডিরেক্টরি ( ) থাকবে - এবং মূল শৈলী / মুদ্রণ সিএসএস ফাইল (গুলি) এ আউটপুট।
টেমপ্লেট পরিষ্কার করা
সুতরাং যেমনটি আমরা উল্লেখ করেছি, একবার টেমপ্লেট থিমটি শেষ হয়ে গেলে, আপনি এখন এটি পরিষ্কার করতে পারেন - অ-পরিবর্তিত ফাইলগুলি সরাতে এবং এটিকে খালি সর্বনিম্নে হ্রাস করতে।
cd ./app/design/frontend
PREFIX="cleantheme_"
THEME="sonassi/default"
diff -BPqr "base/default/template" "$THEME/template" | \
awk '{print $4}' | \
while read FILE; do
DIR=$(dirname "$FILE")
[ -d "$PREFIX$DIR" ] || mkdir -p "$PREFIX$DIR"
[ -f "$PREFIX$FILE" ] || cp -pa "$FILE" "$PREFIX$FILE"
done
cp -par "$THEME/layout" "$PREFIX$THEME/"
তাহলে কেন না local.xml
?
এটি আপনার পক্ষে নয় - এটি তৃতীয় পক্ষের পক্ষে, একইভাবে community
আপনার local
পক্ষে এবং তৃতীয় পক্ষের পক্ষেও। ওভাররাইডের জন্য এটি একটি ব্যর্থব্যাক, শেষ অবলম্বন, চূড়ান্ত গন্তব্য।
এক্সএএমএমএলকে এই ফ্যাশনে কাঠামো তৈরি করা এটিকে ম্যাজেন্টো মূলত ডিরেক্টরি এবং ফাইলের কাঠামোটি কনফিগার করার সাথে সামঞ্জস্য রাখে। প্লাস, বিকাশের ধারাবাহিকতার জন্য - এটি কেবল আরও বুদ্ধিমান করে তোলে, হজম করা অনেক সহজ এবং লক্ষণীয় ওভারহেড যুক্ত করে না।
ম্যাজেন্টো একটি অদ্ভুত পণ্য, সম্প্রদায় সাধারণ জ্ঞানের ভিত্তিতে এবং ম্যাজেন্টো কোর দল কী করে তা নকল করে তার নিজস্ব সেরা অনুশীলন আবিষ্কার করেছে। সুতরাং কোনও সরকারী উপায় নেই (ম্যাগেন্টো -১ ডকুমেন্টেশনের সাথে কোনও ইউনিকর্ন না চলা পর্যন্ত নয়) ; তবে এটি আমাদের পথ।
তাই আমি এমনকি এটি প্রসারিত করে বলতে চাই যে এটি উত্তর নয়, সাধারণভাবে সম্মুখীন চ্যালেঞ্জ মোকাবেলায় এটির একাধিক উপায়। যদিও আমি ভাবতে চাই যে আমাদের পদ্ধতিটি সেরা।
সোনাসি ডট কম থেকে আনন্দের সাথে সামগ্রীগুলি