Version Notes
Added multistore support
Download this release
Release Info
Developer | Marcin Klauza |
Extension | 2f0ed0fddbc299a929e59604a51b5159 |
Version | 1.0.4 |
Comparing to | |
See all releases |
Code changes from version 1.0.3 to 1.0.4
- app/code/community/Mklauza/CustomProductUrls/Block/Adminhtml/Form/Abstract.php +2 -1
- app/code/community/Mklauza/CustomProductUrls/Block/Adminhtml/Form/Massaction.php +2 -1
- app/code/community/Mklauza/CustomProductUrls/Helper/Data.php +7 -133
- app/code/community/Mklauza/CustomProductUrls/Model/Adminhtml/Observer.php +3 -4
- app/code/community/Mklauza/CustomProductUrls/controllers/Adminhtml/Catalog/Product/Action/ProductUrlsMassActionController.php +2 -2
- app/code/community/Mklauza/CustomProductUrls/etc/config.xml +1 -1
- package.xml +5 -5
app/code/community/Mklauza/CustomProductUrls/Block/Adminhtml/Form/Abstract.php
CHANGED
@@ -37,7 +37,8 @@ abstract class Mklauza_CustomProductUrls_Block_Adminhtml_Form_Abstract extends M
|
|
37 |
public abstract function getSubmitUrl();
|
38 |
|
39 |
public function getExampleUrl() {
|
40 |
-
|
|
|
41 |
}
|
42 |
|
43 |
protected function getPatternObject() {
|
37 |
public abstract function getSubmitUrl();
|
38 |
|
39 |
public function getExampleUrl() {
|
40 |
+
$storeId = Mage::app()->getRequest()->getParam('store', 0);
|
41 |
+
return Mage::helper('adminhtml')->getUrl('adminhtml/ProductUrls/example', array('store' => $storeId));
|
42 |
}
|
43 |
|
44 |
protected function getPatternObject() {
|
app/code/community/Mklauza/CustomProductUrls/Block/Adminhtml/Form/Massaction.php
CHANGED
@@ -28,7 +28,8 @@ class Mklauza_CustomProductUrls_Block_Adminhtml_Form_Massaction extends Mklauza_
|
|
28 |
}
|
29 |
|
30 |
public function getSubmitUrl() {
|
31 |
-
|
|
|
32 |
}
|
33 |
|
34 |
public function getSaveRewritesHistory() {
|
28 |
}
|
29 |
|
30 |
public function getSubmitUrl() {
|
31 |
+
$storeId = Mage::app()->getRequest()->getParam('store', 0);
|
32 |
+
return Mage::helper('adminhtml')->getUrl('adminhtml/ProductUrlsMassAction/save', array('store' => $storeId));
|
33 |
}
|
34 |
|
35 |
public function getSaveRewritesHistory() {
|
app/code/community/Mklauza/CustomProductUrls/Helper/Data.php
CHANGED
@@ -22,146 +22,20 @@
|
|
22 |
|
23 |
class Mklauza_CustomProductUrls_Helper_Data extends Mage_Core_Helper_Abstract {
|
24 |
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
|
29 |
public function getIsEnabled() {
|
30 |
-
return Mage::getStoreConfigFlag('mklauza_customproducturls/general/is_active');
|
31 |
}
|
32 |
|
33 |
public function getApplyToNewFlag() {
|
34 |
-
return Mage::getStoreConfigFlag('mklauza_customproducturls/general/apply_to_new');
|
35 |
}
|
36 |
|
37 |
public function getConfigPattern() {
|
38 |
-
return Mage::getStoreConfig('mklauza_customproducturls/general/pattern');
|
39 |
-
}
|
40 |
-
|
41 |
-
// public function getAttributesCollection() {
|
42 |
-
// if($this->_attributesCollection === null) {
|
43 |
-
// $this->_attributesCollection = Mage::getResourceModel('catalog/product_attribute_collection')
|
44 |
-
// ->addVisibleFilter('is_visible_on_front', array('=' => '1'))
|
45 |
-
// ->addFieldTofilter('attribute_code', array('neq' => 'url_key'));
|
46 |
-
// }
|
47 |
-
// return $this->_attributesCollection;
|
48 |
-
// }
|
49 |
-
//
|
50 |
-
// public function getProductAttributes() {
|
51 |
-
// if($this->_productAttributes === null) {
|
52 |
-
//
|
53 |
-
// $attributes = array();
|
54 |
-
// foreach ($this->getAttributesCollection() as $productAttr) { /** @var Mage_Catalog_Model_Resource_Eav_Attribute $productAttr */
|
55 |
-
// $attributes[$productAttr->getAttributeCode()] = $this->jsQuoteEscape($productAttr->getFrontendLabel());
|
56 |
-
// }
|
57 |
-
// $this->_productAttributes = $attributes;
|
58 |
-
// }
|
59 |
-
// return $this->_productAttributes;
|
60 |
-
// }
|
61 |
-
//
|
62 |
-
// public function extractChunks($urlPattern = '') {
|
63 |
-
// $regex = '/(\{(\w+)\})?([^\{\}]+)?/';
|
64 |
-
//
|
65 |
-
// $chunks = array();
|
66 |
-
// $doesMatch = true;
|
67 |
-
// while(strlen($urlPattern) && $doesMatch)
|
68 |
-
// {
|
69 |
-
// $matches = array();
|
70 |
-
// $doesMatch = preg_match($regex, $urlPattern, $matches);
|
71 |
-
// if(!empty($matches[2])) {
|
72 |
-
// $chunks[] = array('value' => $matches[2], 'type' => 'attribute');
|
73 |
-
// }
|
74 |
-
// if(!empty($matches[3])) {
|
75 |
-
// $chunks[] = array('value' => $matches[3], 'type' => 'text');
|
76 |
-
// }
|
77 |
-
//
|
78 |
-
// $urlPattern = str_replace($matches[0], '', $urlPattern);
|
79 |
-
// }
|
80 |
-
//
|
81 |
-
// return $chunks;
|
82 |
-
// }
|
83 |
-
//
|
84 |
-
// public function getPatternChunks($urlPattern) {
|
85 |
-
// if($this->_patternChunks === null) {
|
86 |
-
// $this->_patternChunks = $this->extractChunks($urlPattern);
|
87 |
-
// }
|
88 |
-
// return $this->_patternChunks;
|
89 |
-
// }
|
90 |
-
//
|
91 |
-
// private function _getPatternAttributes() {
|
92 |
-
// $chunks = $this->getPatternChunks();
|
93 |
-
// foreach($chunks as $chunk) {
|
94 |
-
// if($chunk['type'] === 'attribute') {
|
95 |
-
// $attributes[] = $chunk['value'];
|
96 |
-
// }
|
97 |
-
// }
|
98 |
-
// $attributes = array_flip($attributes);
|
99 |
-
// foreach($attributes as $_code => $val) {
|
100 |
-
// $attribute = Mage::getSingleton('eav/config')
|
101 |
-
// ->getAttribute(Mage_Catalog_Model_Product::ENTITY, $_code);
|
102 |
-
// if ($attribute->usesSource()) {
|
103 |
-
// $htmlOptions = $attribute->getSource()->getAllOptions(false);
|
104 |
-
// if($htmlOptions && is_array($htmlOptions) && count($htmlOptions))
|
105 |
-
// {
|
106 |
-
// $options = array();
|
107 |
-
// foreach($htmlOptions as $option) {
|
108 |
-
// $options[$option['value']] = $option['label'];
|
109 |
-
// }
|
110 |
-
// $attributes[$_code]= $options;
|
111 |
-
// }
|
112 |
-
// }
|
113 |
-
// }
|
114 |
-
// return $attributes;
|
115 |
-
// }
|
116 |
-
//
|
117 |
-
// public function prepareUrlKey($productId, $urlPattern, $storeId) {
|
118 |
-
// $chunks = $this->getPatternChunks($urlPattern);
|
119 |
-
// $patternAttributes = $this->_getPatternAttributes();
|
120 |
-
//
|
121 |
-
// foreach($patternAttributes as $code => &$value) {
|
122 |
-
// $rawValue = Mage::getModel('catalog/product')->getResource()->getAttributeRawValue($productId, $code, $storeId);
|
123 |
-
// // options
|
124 |
-
// if(is_array($value)) {
|
125 |
-
// $textOption = $value[$rawValue];
|
126 |
-
// $value = $textOption;
|
127 |
-
// } elseif($code === 'price') {
|
128 |
-
// $value = number_format($rawValue, 2);
|
129 |
-
// } else {
|
130 |
-
// $value = $rawValue;
|
131 |
-
// }
|
132 |
-
// }
|
133 |
-
//
|
134 |
-
// $url_str = '';
|
135 |
-
// foreach($chunks as $chunk) {
|
136 |
-
// if($chunk['type'] === 'attribute') {
|
137 |
-
// $attrCode = $chunk['value'];
|
138 |
-
// $url_str .= $patternAttributes[$attrCode];
|
139 |
-
// } elseif($chunk['type'] === 'text') {
|
140 |
-
// $url_str .= $chunk['value'];
|
141 |
-
// }
|
142 |
-
// }
|
143 |
-
//
|
144 |
-
// return $url_str;
|
145 |
-
// }
|
146 |
-
//
|
147 |
-
// public function getRandomExample($pattern) {
|
148 |
-
// $storeId = Mage::app()->getStore()->getStoreId();
|
149 |
-
////// @test
|
150 |
-
////$profiler = Mage::getSingleton('core/resource')->getConnection('core_write')->getProfiler();
|
151 |
-
////$profiler->setEnabled(true);
|
152 |
-
// // get random product Id
|
153 |
-
// $collection = Mage::getResourceModel('catalog/product_collection')
|
154 |
-
// ->addStoreFilter($storeId)
|
155 |
-
// ->addFieldToFilter('visibility', array('neq' => Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE));
|
156 |
-
// $collection->getSelect()->reset(Zend_Db_Select::COLUMNS)->columns('entity_id')->order(new Zend_Db_Expr('RAND()'))->limit(1);
|
157 |
-
// $productId = $collection->getFirstItem()->getId();
|
158 |
-
////// @test
|
159 |
-
////Mage::log(print_r($profiler->getQueryProfiles(), true), null, 'example.log', true);
|
160 |
-
////Mage::log(array($profiler->getTotalNumQueries(), $profiler->getTotalElapsedSecs()), null, 'example.log', true);
|
161 |
-
////$profiler->setEnabled(false);
|
162 |
-
// $url_key = $this->prepareUrlKey($productId, $pattern, $storeId);
|
163 |
-
// $url_key = Mage::getModel('catalog/product_url')->formatUrlKey($url_key);
|
164 |
-
// return Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB) . $url_key . Mage::getStoreConfig('catalog/seo/product_url_suffix');
|
165 |
-
// }
|
166 |
|
167 |
}
|
22 |
|
23 |
class Mklauza_CustomProductUrls_Helper_Data extends Mage_Core_Helper_Abstract {
|
24 |
|
25 |
+
public function getStoreId() {
|
26 |
+
return Mage::app()->getRequest()->getParam('store', null);
|
27 |
+
}
|
28 |
|
29 |
public function getIsEnabled() {
|
30 |
+
return Mage::getStoreConfigFlag('mklauza_customproducturls/general/is_active', $this->getStoreId());
|
31 |
}
|
32 |
|
33 |
public function getApplyToNewFlag() {
|
34 |
+
return Mage::getStoreConfigFlag('mklauza_customproducturls/general/apply_to_new', $this->getStoreId());
|
35 |
}
|
36 |
|
37 |
public function getConfigPattern() {
|
38 |
+
return Mage::getStoreConfig('mklauza_customproducturls/general/pattern', $this->getStoreId());
|
39 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
|
41 |
}
|
app/code/community/Mklauza/CustomProductUrls/Model/Adminhtml/Observer.php
CHANGED
@@ -30,9 +30,10 @@ class Mklauza_CustomProductUrls_Model_Adminhtml_Observer {
|
|
30 |
$block->getMassactionBlock()->setFormFieldName('product');
|
31 |
// $block->getMassactionBlock()->setUseSelectAll(false);
|
32 |
|
|
|
33 |
$block->getMassactionBlock()->addItem('mklauza_customproducturls', array(
|
34 |
'label' => 'Set custom URL',
|
35 |
-
'url' => $block->getUrl('*/productUrlsMassAction/edit'),
|
36 |
));
|
37 |
|
38 |
return $this;
|
@@ -53,9 +54,7 @@ class Mklauza_CustomProductUrls_Model_Adminhtml_Observer {
|
|
53 |
public function generateUrlKey(Varien_Event_Observer $observer) { // catalog_product_save_after
|
54 |
$product = $observer->getEvent()->getProduct();
|
55 |
|
56 |
-
if(Mage::registry('generate_url') && $product->getId()) { // in case we save product with empty url key
|
57 |
-
// && !($product->getTypeId() == 'simple' && $product->getAttributeSetId() == $this->getAttributeSetId('prenumerata'))
|
58 |
-
|
59 |
$urlPattern = Mage::helper('mklauza_customproducturls')->getConfigPattern();
|
60 |
$storeId = Mage::app()->getStore()->getId();
|
61 |
|
30 |
$block->getMassactionBlock()->setFormFieldName('product');
|
31 |
// $block->getMassactionBlock()->setUseSelectAll(false);
|
32 |
|
33 |
+
$storeId = Mage::app()->getRequest()->getParam('store', 0);
|
34 |
$block->getMassactionBlock()->addItem('mklauza_customproducturls', array(
|
35 |
'label' => 'Set custom URL',
|
36 |
+
'url' => $block->getUrl('*/productUrlsMassAction/edit', array('store' => $storeId)),
|
37 |
));
|
38 |
|
39 |
return $this;
|
54 |
public function generateUrlKey(Varien_Event_Observer $observer) { // catalog_product_save_after
|
55 |
$product = $observer->getEvent()->getProduct();
|
56 |
|
57 |
+
if(Mage::registry('generate_url') && $product->getId()) { // in case we save product with empty url key
|
|
|
|
|
58 |
$urlPattern = Mage::helper('mklauza_customproducturls')->getConfigPattern();
|
59 |
$storeId = Mage::app()->getStore()->getId();
|
60 |
|
app/code/community/Mklauza/CustomProductUrls/controllers/Adminhtml/Catalog/Product/Action/ProductUrlsMassActionController.php
CHANGED
@@ -25,7 +25,7 @@ class Mklauza_CustomProductUrls_Adminhtml_Catalog_Product_Action_ProductUrlsMass
|
|
25 |
// @overridden
|
26 |
public function preDispatch() {
|
27 |
parent::preDispatch();
|
28 |
-
if(!Mage::
|
29 |
$this->_redirect('adminhtml/dashboard');
|
30 |
return;
|
31 |
}
|
@@ -117,7 +117,7 @@ class Mklauza_CustomProductUrls_Adminhtml_Catalog_Product_Action_ProductUrlsMass
|
|
117 |
//Mage::log(print_r($profiler->getQueryProfiles(), true), null, 'queries.log', true);
|
118 |
//Mage::log(array($profiler->getTotalNumQueries(), $profiler->getTotalElapsedSecs()), null, 'queries.log', true);
|
119 |
//$profiler->setEnabled(false);
|
120 |
-
|
121 |
$this->_redirect('*/catalog_product/', array('store'=>$this->_helper()->getSelectedStoreId()));
|
122 |
}
|
123 |
|
25 |
// @overridden
|
26 |
public function preDispatch() {
|
27 |
parent::preDispatch();
|
28 |
+
if(!Mage::helper('mklauza_customproducturls')->getIsEnabled()) {
|
29 |
$this->_redirect('adminhtml/dashboard');
|
30 |
return;
|
31 |
}
|
117 |
//Mage::log(print_r($profiler->getQueryProfiles(), true), null, 'queries.log', true);
|
118 |
//Mage::log(array($profiler->getTotalNumQueries(), $profiler->getTotalElapsedSecs()), null, 'queries.log', true);
|
119 |
//$profiler->setEnabled(false);
|
120 |
+
|
121 |
$this->_redirect('*/catalog_product/', array('store'=>$this->_helper()->getSelectedStoreId()));
|
122 |
}
|
123 |
|
app/code/community/Mklauza/CustomProductUrls/etc/config.xml
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
<config>
|
3 |
<modules>
|
4 |
<Mklauza_CustomProductUrls>
|
5 |
-
<version>0.0.
|
6 |
</Mklauza_CustomProductUrls>
|
7 |
</modules>
|
8 |
|
2 |
<config>
|
3 |
<modules>
|
4 |
<Mklauza_CustomProductUrls>
|
5 |
+
<version>0.0.4</version>
|
6 |
</Mklauza_CustomProductUrls>
|
7 |
</modules>
|
8 |
|
package.xml
CHANGED
@@ -1,18 +1,18 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>2f0ed0fddbc299a929e59604a51b5159</name>
|
4 |
-
<version>1.0.
|
5 |
<stability>stable</stability>
|
6 |
<license>OSL</license>
|
7 |
<channel>community</channel>
|
8 |
<extends/>
|
9 |
<summary>Create mass custom product urls.</summary>
|
10 |
<description>Extension allowing to mass change product url key according to template consisting of product attributes.</description>
|
11 |
-
<notes>
|
12 |
<authors><author><name>Marcin Klauza</name><user>marcin</user><email>marcinklauza@gmail.com</email></author></authors>
|
13 |
-
<date>2016-05
|
14 |
-
<time>
|
15 |
-
<contents><target name="magecommunity"><dir><dir name="Mklauza"><dir name="CustomProductUrls"><dir name="Block"><dir name="Adminhtml"><dir name="Form"><file name="Abstract.php" hash="
|
16 |
<compatible/>
|
17 |
<dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php></required></dependencies>
|
18 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>2f0ed0fddbc299a929e59604a51b5159</name>
|
4 |
+
<version>1.0.4</version>
|
5 |
<stability>stable</stability>
|
6 |
<license>OSL</license>
|
7 |
<channel>community</channel>
|
8 |
<extends/>
|
9 |
<summary>Create mass custom product urls.</summary>
|
10 |
<description>Extension allowing to mass change product url key according to template consisting of product attributes.</description>
|
11 |
+
<notes>Added multistore support</notes>
|
12 |
<authors><author><name>Marcin Klauza</name><user>marcin</user><email>marcinklauza@gmail.com</email></author></authors>
|
13 |
+
<date>2016-09-05</date>
|
14 |
+
<time>20:14:51</time>
|
15 |
+
<contents><target name="magecommunity"><dir><dir name="Mklauza"><dir name="CustomProductUrls"><dir name="Block"><dir name="Adminhtml"><dir name="Form"><file name="Abstract.php" hash="bab4fac7f108f5cbbb31f4bf090aa3d8"/><file name="Massaction.php" hash="a5409bd20ded3fa7efc64b432cc67499"/><file name="Settings.php" hash="daeaa0ed5176e34677169b6f73f26f3e"/></dir><dir name="System"><dir name="Config"><dir name="Form"><file name="Pattern.php" hash="34dc42258f8d40b3d6adb64371e9d1f6"/></dir></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="1c02b0aaa35ee4e5fb9565760a083823"/></dir><dir name="Model"><dir name="Adminhtml"><file name="Observer.php" hash="25a293717b2c5c546cde2e9617669d3b"/></dir><dir name="Catalog"><dir name="Product"><file name="Url.php" hash="94a90ca37095d7b2cda703336474befe"/></dir><dir name="Resource"><dir name="Product"><file name="Action.php" hash="7fbb37b1529f1d9ae981a8edc58b352d"/></dir></dir></dir><file name="Pattern.php" hash="cba585ea2d11050aab3a6c8c5089d47e"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Catalog"><dir name="Product"><dir name="Action"><file name="ProductUrlsMassActionController.php" hash="8b89c330f89a9d18cf06fac3255b358d"/></dir></dir></dir><file name="ProductUrlsController.php" hash="5fcb9eb4ab89f9c611837e37058e46fd"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="dad9c0dd1088595d6da2474e69ff7ce6"/><file name="config.xml" hash="5fca911010b15cacb9f0d813df82f8ec"/><file name="system.xml" hash="bd5402bc4b30168d4aa67a91b94b11d3"/></dir></dir></dir></dir></target><target name="magedesign"><dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><dir name="mklauza"><file name="product_urls.xml" hash="972b7551a3fbcb7b8bc87aff5732c52c"/></dir></dir><dir name="template"><dir name="mklauza"><dir name="customproducturls"><file name="massaction.phtml" hash="f00d86e1cd3d5e310e76b64616d2be52"/><dir name="system"><file name="settings.phtml" hash="d2c9195d497cd76a4b0cc541b1165fa0"/></dir></dir></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir><dir name="modules"><file name="Mklauza_CustomProductUrls.xml" hash="0f6d8d6a5dd2261fed9f49e853f68adf"/></dir></dir></target><target name="mage"><dir><dir name="js"><dir name="mklauza_customproducturls"><file name="jquery-1.11.2.min.js" hash="019c5fb7c4771808dc65e1096c771348"/><file name="jquery-ui.min.js" hash="7403b37e7918413f5a43131b95c86abb"/><file name="loadingdots.css" hash="b9f95df94e9f9384093edad63ae4cff1"/><file name="template.css" hash="c08f3bb77f768b2f728881626a486783"/><file name="template.js" hash="35e4143558041c04210c933120f75afc"/></dir></dir></dir></target></contents>
|
16 |
<compatible/>
|
17 |
<dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php></required></dependencies>
|
18 |
</package>
|