Реестр переменных magento представляет собой отличный способ обмена и получения информации в любом месте вашего магазина. Другими словами реестр позволяет создавать новые глобальные переменные, которые могут быть доступны в любом месте вашего магазина.

В отличие от динамических функций, будучи статической функцией, реестр magento может быть вызван напрямую без создания экземпляра объекта. Шаблон вызова :



ClassName::StaticFunctionName()


Имеются 2 основные функции для добавления и удаления переменных из реестра.

register() – добавляет переменные в реестр, разрешенные типы данных: integer, string, array. unregister() – удаляет переменную из реестра. registry() – функция вызова переменной из реестра.

Как добавить переменную в реестр?

Для добавление данных посредством переменных в реестр достаточно только вызвать функцию register(), рассмотрим несколько примеров:

Добавление в реестр store_id.



    Mage::register('store_id', Mage::app()->getStore()->getId());
     // Mage::app()->getStore()->getId()); получаем store id.
    Mage::registry('store_id'); // регистрируем store_id .
    Mage::unregister('store_id'); // убираем регистрацию store_id


Добавление в реестр product_id.



    // Mage::register($key, $value);
    $productId = 10; // product ID товара, доступного в вашем store
    $_myproductID = Mage::getModel('catalog/product')->load($productId);
    Mage::register('myproductID', $_ myproductID);


Как получить product_id из реестра.

Получить данные из реестра несложно, нужно только вызвать функцию register():



    // $value = Mage::registry($key)
    $_myproductID = Mage::registry('myproductID')


Вы наверное думаете что когда magento обращается к регистру он вызывает некий метод, наподобие $_product = $this->getProduct() , который в свою очередь делает запрос в базу данных. Одна из самых интересных вещей в реестре, это то что он не делает запросов в базу данных а только проверяет, есть ли в нем соответствующее значение. Это гораздо быстрее чем запросы в базу данных. Взгляните на то, как мы извлекли значение $_myproductID из реестра. Magento использует ту же технику для ускорения запросов.

Точно также реестр Magento может дать вам соответствующие данные без необходимости обращения к базе данных для многих операций, таких как:

Узнать текущую страницу CMS модель.



 $_thispage = Mage::registry('cms_page');
    echo $_thispage->getTitle().'<br/>';
    echo $_thispage->getContent();


Доступ к текущей модели категории



    $_category = Mage::registry('current_category');
    echo $_category->getName();


Как просматривать содержимое реестра Magento

Увидеть то, что записано в реестре Magento при помощи стандартных методов нельзя. Вам нужно изменить Mage.php, чтобы просмотреть содержимое реестра. Создайте резервную копию файла Mage.php, чтобы откатиться на нее когда манипуляции с просмотром будут завершены.

Mage.php содержит много статических функций, которые могут вызываться без создания экземпляра класса. Откройте файл Mage.php и добавьте следующий метод в любом месте Mage.php который в конечном итоге вернет весь реестр Magento.



public static function getRegistry() { return self::$_registry; }
<?php $entireregistryArray = Mage::getRegistry() ?>


Теперь у вас есть весь реестр в виде массива в $ entireregistryArray. Вы можете просмотреть весь реестр либо так:



<?php print_r($entireregistryArray);?>


Или так, со всеми ключами, значениями, типами данных и классами:



<?php $registry = Mage::getRegistry() ?>
<?php if (count($registry) > 0): ?>
	<h2>Store’s Current Registry</h2>
	<ul>
		<?php foreach($registry as $index => $value): ?>
			<li>
				Registry['<a href="#"><?php echo $index ?></a>'] = 
				(<em><?php echo gettype($value) ?></em>) 
				<strong>
					<?php if (is_object($value)): ?>
						<?php echo get_class($value) ?>
					<?php elseif (is_array($value)): ?>
						Array
					<?php else: ?>
						<?php echo $value ?>
					<?php endif; ?>
				</strong>
			</li>
		<?php endforeach; ?>
	</ul>
<?php endif; ?>
<?php exit ?>


Когда вы запустите этот кусок кода данные будут в следующем формате

• Registry['original_include_path'] = (string) .:/Applications/MAMP/bin/php5/lib/php

• Registry['_singleton/core/resource'] = (object) Mage_Core_Model_Resource

Я думаю, этого достаточно, чтобы вы поняли, какими возможностями обладает реестр Magento. Мне бы очень хотелось узнать о вашем опыте работы с реестром Magento. Пожалуйста, оставляйте свои комментарии. Подпишитесь на нашу RSS для получения последних обновлений Magento.