iKantam_Internal_SEO_Linking - Version 0.1.0

Version Notes

First Stable Release

Download this release

Release Info

Developer iKantam LLC
Extension iKantam_Internal_SEO_Linking
Version 0.1.0
Comparing to
See all releases


Version 0.1.0

Files changed (22) hide show
  1. app/code/community/Ikantam/Internalseolinking/Block/Adminhtml/Internalseolinking.php +41 -0
  2. app/code/community/Ikantam/Internalseolinking/Block/Adminhtml/Internalseolinking/Edit.php +128 -0
  3. app/code/community/Ikantam/Internalseolinking/Block/Adminhtml/Internalseolinking/Edit/Form.php +43 -0
  4. app/code/community/Ikantam/Internalseolinking/Block/Adminhtml/Internalseolinking/Edit/Tab/Form.php +101 -0
  5. app/code/community/Ikantam/Internalseolinking/Block/Adminhtml/Internalseolinking/Edit/Tabs.php +54 -0
  6. app/code/community/Ikantam/Internalseolinking/Block/Adminhtml/Internalseolinking/Grid.php +120 -0
  7. app/code/community/Ikantam/Internalseolinking/Helper/Data.php +225 -0
  8. app/code/community/Ikantam/Internalseolinking/Model/Internalseolinking.php +33 -0
  9. app/code/community/Ikantam/Internalseolinking/Model/Observer.php +50 -0
  10. app/code/community/Ikantam/Internalseolinking/Model/Resource/Internalseolinking.php +30 -0
  11. app/code/community/Ikantam/Internalseolinking/Model/Resource/Internalseolinking/Collection.php +124 -0
  12. app/code/community/Ikantam/Internalseolinking/Model/Resource/Setup.php +26 -0
  13. app/code/community/Ikantam/Internalseolinking/Model/Template/Filter.php +58 -0
  14. app/code/community/Ikantam/Internalseolinking/controllers/Adminhtml/InternalseolinkingController.php +179 -0
  15. app/code/community/Ikantam/Internalseolinking/etc/adminhtml.xml +63 -0
  16. app/code/community/Ikantam/Internalseolinking/etc/config.xml +114 -0
  17. app/code/community/Ikantam/Internalseolinking/etc/system.xml +145 -0
  18. app/code/community/Ikantam/Internalseolinking/sql/internalseolinking_setup/mysql4-install-0.1.0.php +89 -0
  19. app/design/adminhtml/default/default/layout/internalseolinking.xml +32 -0
  20. app/etc/modules/Ikantam_Internalseolinking.xml +27 -0
  21. app/locale/en_US/Ikantam_Internalseolinking.csv +39 -0
  22. package.xml +37 -0
app/code/community/Ikantam/Internalseolinking/Block/Adminhtml/Internalseolinking.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Internal SEO Linking
4
+ *
5
+ * LICENSE: this source file is subject to the Open Software License (OSL 3.0)
6
+ * that is bundled with this package in the file LICENSE.txt.
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Ikantam
11
+ * @package Ikantam_Internalseolinking
12
+ * @copyright Copyright (c) 2012 iKantam LLC (http://www.ikantam.com)
13
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
14
+ */
15
+
16
+ /**
17
+ * Internalseolinking page content block
18
+ *
19
+ * @category Ikantam
20
+ * @package Ikantam_Internalseolinking
21
+ * @author iKantam Team <support@ikantam.com>
22
+ */
23
+ class Ikantam_Internalseolinking_Block_Adminhtml_Internalseolinking extends Mage_Adminhtml_Block_Widget_Grid_Container
24
+ {
25
+ /**
26
+ * Block constructor
27
+ *
28
+ */
29
+ public function __construct()
30
+ {
31
+ $helper = Mage::helper('internalseolinking');
32
+
33
+ $this->_controller = 'adminhtml_internalseolinking';
34
+ $this->_blockGroup = 'internalseolinking';
35
+ $this->_headerText = $helper->__('Internal SEO Linking Manager');
36
+ $this->_addButtonLabel = $helper->__('Add New Record');
37
+
38
+ parent::__construct();
39
+ }
40
+
41
+ }
app/code/community/Ikantam/Internalseolinking/Block/Adminhtml/Internalseolinking/Edit.php ADDED
@@ -0,0 +1,128 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * iKantam
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * @category Ikantam
13
+ * @package Ikantam_Internalseolinking
14
+ * @copyright Copyright (c) 2012 iKantam LLC (http://www.ikantam.com)
15
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
16
+ */
17
+
18
+ /**
19
+ * Internalseolinking edit block
20
+ *
21
+ * @category Ikantam
22
+ * @package Ikantam_Internalseolinking
23
+ * @author iKantam Magento Team <support@ikantam.com>
24
+ */
25
+ class Ikantam_Internalseolinking_Block_Adminhtml_Internalseolinking_Edit
26
+ extends Mage_Adminhtml_Block_Widget_Form_Container
27
+ {
28
+ /**
29
+ * Init block, add and update buttons
30
+ *
31
+ * @return void
32
+ */
33
+ public function __construct()
34
+ {
35
+ $helper = Mage::helper('internalseolinking');
36
+
37
+ $this->_objectId = 'isl_id';
38
+ $this->_controller = 'adminhtml_internalseolinking';
39
+
40
+ parent::__construct();
41
+
42
+ $this->_blockGroup = 'internalseolinking';
43
+
44
+ $this->_updateButton('save', 'label', $helper->__('Save Record'));
45
+ $this->_updateButton('delete', 'label', $helper->__('Delete Record'));
46
+
47
+ $this->_addButton(
48
+ 'save_and_edit_button', array(
49
+ 'label' => $helper->__('Save And Continue Edit'),
50
+ 'onclick' => 'saveAndContinueEdit(\'' . $this->_getSaveAndContinueUrl() . '\')',
51
+ 'class' => 'save',
52
+ ), 1
53
+ );
54
+
55
+ //TODO: do we need this?
56
+ $this->_formScripts[] = 'function saveAndContinueEdit(){
57
+ editForm.submit($("edit_form").action+"back/edit/");
58
+ }';
59
+ }
60
+
61
+ /**
62
+ * Retrieve Header text
63
+ *
64
+ * @return string
65
+ */
66
+ public function getHeaderText()
67
+ {
68
+ if (Mage::registry('current_internalseolink')->getId()) {
69
+ return Mage::helper('internalseolinking')->__(
70
+ 'Edit Record #%s', $this->htmlEscape(
71
+ Mage::registry('current_internalseolink')->getId()
72
+ )
73
+ );
74
+ } else {
75
+ return Mage::helper('internalseolinking')->__('New Record');
76
+ }
77
+ }
78
+
79
+ /**
80
+ * Retrieve Delete URL
81
+ *
82
+ * @return string
83
+ */
84
+ public function getDeleteUrl()
85
+ {
86
+ return $this->getUrl(
87
+ '*/*/delete', array(
88
+ 'isl_id' => $this->getRequest()->getParam($this->_objectId),
89
+ 'ret' => $this->getRequest()->getParam('ret', 'index'))
90
+ );
91
+ }
92
+
93
+ /**
94
+ * Retrieve SaveAndContinue URL
95
+ *
96
+ * @return string
97
+ */
98
+ public function _getSaveAndContinueUrl()
99
+ {
100
+ return $this->getUrl(
101
+ '*/*/save', array(
102
+ '_current' => true,
103
+ 'ret' => 'edit',
104
+ 'continue' => $this->getRequest()->getParam('ret', 'index'))
105
+ );
106
+ }
107
+
108
+ /**
109
+ * Retrieve Save URL
110
+ *
111
+ * @return string
112
+ */
113
+ public function getSaveUrl()
114
+ {
115
+ return $this->getUrl('*/*/save', array('_current'=>true));
116
+ }
117
+
118
+ /**
119
+ * Get URL for back (reset) button
120
+ *
121
+ * @return string
122
+ */
123
+ public function getBackUrl()
124
+ {
125
+ return $this->getUrl('*/*/' . $this->getRequest()->getParam('ret', 'index'));
126
+ }
127
+
128
+ }
app/code/community/Ikantam/Internalseolinking/Block/Adminhtml/Internalseolinking/Edit/Form.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Internal SEO Linking
4
+ *
5
+ * LICENSE: this source file is subject to the Open Software License (OSL 3.0)
6
+ * that is bundled with this package in the file LICENSE.txt.
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Ikantam
11
+ * @package Ikantam_Internalseolinking
12
+ * @copyright Copyright (c) 2012 iKantam LLC (http://www.ikantam.com)
13
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
14
+ */
15
+
16
+ /**
17
+ * Internalseolinking edit form block
18
+ *
19
+ * @category Ikantam
20
+ * @package Ikantam_Internalseolinking
21
+ * @author iKantam Team <support@ikantam.com>
22
+ */
23
+ class Ikantam_Internalseolinking_Block_Adminhtml_Internalseolinking_Edit_Form extends Mage_Adminhtml_Block_Widget_Form
24
+ {
25
+ /*
26
+ * Init form
27
+ *
28
+ */
29
+ protected function _prepareForm()
30
+ {
31
+ $form = new Varien_Data_Form(
32
+ array(
33
+ "id" => "edit_form",
34
+ "action" => $this->getUrl("*/*/save", array("isl_id" => $this->getRequest()->getParam("isl_id"))),
35
+ "method" => "post")
36
+ );
37
+
38
+ $form->setUseContainer(true);
39
+ $this->setForm($form);
40
+ return parent::_prepareForm();
41
+ }
42
+
43
+ }
app/code/community/Ikantam/Internalseolinking/Block/Adminhtml/Internalseolinking/Edit/Tab/Form.php ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Internal SEO Linking
4
+ *
5
+ * LICENSE: this source file is subject to the Open Software License (OSL 3.0)
6
+ * that is bundled with this package in the file LICENSE.txt.
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Ikantam
11
+ * @package Ikantam_Internalseolinking
12
+ * @copyright Copyright (c) 2012 iKantam LLC (http://www.ikantam.com)
13
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
14
+ */
15
+
16
+ /**
17
+ * Internalseolinking edit form
18
+ *
19
+ * @category Ikantam
20
+ * @package Ikantam_Internalseolinking
21
+ * @author iKantam Team <support@ikantam.com>
22
+ */
23
+ class Ikantam_Internalseolinking_Block_Adminhtml_Internalseolinking_Edit_Tab_Form extends Mage_Adminhtml_Block_Widget_Form
24
+ {
25
+ /*
26
+ * Init form fieldset
27
+ *
28
+ * @return Ikantam_Internalseolinking_Block_Adminhtml_Internalseolinking_Edit_Tab_Form
29
+ */
30
+ protected function _prepareForm()
31
+ {
32
+ $form = new Varien_Data_Form();
33
+
34
+ $this->setForm($form);
35
+
36
+ $fieldset = $form->addFieldset(
37
+ 'internalseolinking_form', array(
38
+ 'legend' => Mage::helper('internalseolinking')->__('Record information'))
39
+ );
40
+
41
+ $fieldset->addField(
42
+ 'is_enabled', 'select', array(
43
+ 'label' => Mage::helper('internalseolinking')->__('Enabled'),
44
+ 'name' => 'is_enabled',
45
+ 'values' => array(0 => $this->__('No'), 1 => $this->__('Yes')))
46
+ );
47
+
48
+ $fieldset->addField(
49
+ 'keywords', 'textarea', array(
50
+ 'label' => Mage::helper('internalseolinking')->__('Keywords'),
51
+ 'class' => 'required-entry',
52
+ 'required' => true,
53
+ 'name' => 'keywords')
54
+ );
55
+
56
+ $fieldset->addField(
57
+ 'url', 'text', array(
58
+ 'label' => Mage::helper('internalseolinking')->__('URL'),
59
+ 'class' => 'required-entry',
60
+ 'required' => true,
61
+ 'name' => 'url')
62
+ );
63
+
64
+ $fieldset->addField(
65
+ 'title', 'text', array(
66
+ 'label' => Mage::helper('internalseolinking')->__('Title'),
67
+ 'name' => 'title')
68
+ );
69
+
70
+ $fieldset->addField(
71
+ 'target_blank', 'select', array(
72
+ 'label' => Mage::helper('internalseolinking')->__('Target'),
73
+ 'name' => 'target_blank',
74
+ 'values' => array(0 => '_self', 1 => '_blank'))
75
+ );
76
+
77
+ $fieldset->addField(
78
+ 'is_bold', 'select', array(
79
+ 'label' => Mage::helper('internalseolinking')->__('Make it Bold'),
80
+ 'name' => 'is_bold',
81
+ 'values' => array(0 => $this->__('No'), 1 => $this->__('Yes')))
82
+ );
83
+
84
+ $fieldset->addField(
85
+ 'is_italic', 'select', array(
86
+ 'label' => Mage::helper('internalseolinking')->__('Use Italics'),
87
+ 'name' => 'is_italic',
88
+ 'values' => array(0 => $this->__('No'), 1 => $this->__('Yes')))
89
+ );
90
+
91
+ if (Mage::getSingleton('adminhtml/session')->getInternalseolinkingData()) {
92
+ $form->setValues(Mage::getSingleton('adminhtml/session')->getInternalseolinkingData());
93
+ Mage::getSingleton('adminhtml/session')->setInternalseolinkingData(null);
94
+ } elseif (Mage::registry('current_internalseolink')) {
95
+ $form->setValues(Mage::registry('current_internalseolink')->getData());
96
+ }
97
+
98
+ return parent::_prepareForm();
99
+ }
100
+
101
+ }
app/code/community/Ikantam/Internalseolinking/Block/Adminhtml/Internalseolinking/Edit/Tabs.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Internal SEO Linking
4
+ *
5
+ * LICENSE: this source file is subject to the Open Software License (OSL 3.0)
6
+ * that is bundled with this package in the file LICENSE.txt.
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Ikantam
11
+ * @package Ikantam_Internalseolinking
12
+ * @copyright Copyright (c) 2012 iKantam LLC (http://www.ikantam.com)
13
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
14
+ */
15
+
16
+ /**
17
+ * Internalseolinking tabs block
18
+ *
19
+ * @category Ikantam
20
+ * @package Ikantam_Internalseolinking
21
+ * @author iKantam Team <support@ikantam.com>
22
+ */
23
+ class Ikantam_Internalseolinking_Block_Adminhtml_Internalseolinking_Edit_Tabs extends Mage_Adminhtml_Block_Widget_Tabs
24
+ {
25
+ /*
26
+ * Init block
27
+ *
28
+ */
29
+ public function __construct()
30
+ {
31
+ parent::__construct();
32
+ $this->setId('isl_tabs');
33
+ $this->setDestElementId('edit_form');
34
+ $this->setTitle(Mage::helper('internalseolinking')->__('Internal SEO Linking'));
35
+ }
36
+
37
+ /*
38
+ * Add tabs
39
+ *
40
+ * @return Ikantam_Internalseolinking_Block_Adminhtml_Internalseolinking_Edit_Tabs
41
+ */
42
+ protected function _beforeToHtml()
43
+ {
44
+ $this->addTab(
45
+ 'form_section', array(
46
+ 'label' => Mage::helper('internalseolinking')->__('Record Information'),
47
+ 'title' => Mage::helper('internalseolinking')->__('Record Information'),
48
+ 'content' => $this->getLayout()->createBlock('internalseolinking/adminhtml_internalseolinking_edit_tab_form')->toHtml())
49
+ );
50
+
51
+ return parent::_beforeToHtml();
52
+ }
53
+
54
+ }
app/code/community/Ikantam/Internalseolinking/Block/Adminhtml/Internalseolinking/Grid.php ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Internal SEO Linking
4
+ *
5
+ * LICENSE: this source file is subject to the Open Software License (OSL 3.0)
6
+ * that is bundled with this package in the file LICENSE.txt.
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Ikantam
11
+ * @package Ikantam_Internalseolinking
12
+ * @copyright Copyright (c) 2012 iKantam LLC (http://www.ikantam.com)
13
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
14
+ */
15
+
16
+ /**
17
+ * Internalseolinking grid
18
+ *
19
+ * @category Ikantam
20
+ * @package Ikantam_Internalseolinking
21
+ * @author iKantam Team <support@ikantam.com>
22
+ */
23
+ class Ikantam_Internalseolinking_Block_Adminhtml_Internalseolinking_Grid extends Mage_Adminhtml_Block_Widget_Grid
24
+ {
25
+ /**
26
+ * Initialization
27
+ */
28
+ public function __construct()
29
+ {
30
+ parent::__construct();
31
+ $this->setId('internalseolinking_grid');
32
+ $this->setUseAjax(true);
33
+ $this->setDefaultSort('id');
34
+ $this->setDefaultDir('ASC');
35
+ $this->setSaveParametersInSession(true);
36
+ }
37
+
38
+ /**
39
+ * Retrieve collection class
40
+ *
41
+ * @return string
42
+ */
43
+ protected function _getCollectionClass()
44
+ {
45
+ return 'internalseolinking/internalseolinking_collection';
46
+ }
47
+
48
+ /**
49
+ * Prepare and set collection of grid
50
+ *
51
+ * @return Ikantam_Internalseolinking_Block_Adminhtml_Internalseolinking_Grid
52
+ */
53
+ protected function _prepareCollection()
54
+ {
55
+ $collection = Mage::getResourceModel($this->_getCollectionClass());
56
+ $this->setCollection($collection);
57
+ return parent::_prepareCollection();
58
+ }
59
+
60
+ /**
61
+ * Prepare and add columns to grid
62
+ *
63
+ * @return Ikantam_Internalseolinking_Block_Adminhtml_Internalseolinking_Grid
64
+ */
65
+ protected function _prepareColumns()
66
+ {
67
+ $this->addColumn(
68
+ 'id', array(
69
+ 'header' => Mage::helper('internalseolinking')->__('ID'),
70
+ 'align' => 'right',
71
+ 'width' => '50px',
72
+ 'index' => 'id')
73
+ );
74
+
75
+ $this->addColumn(
76
+ 'keywords', array(
77
+ 'header' => Mage::helper('internalseolinking')->__('Keywords'),
78
+ 'align' => 'left',
79
+ 'index' => 'keywords')
80
+ );
81
+
82
+ $this->addColumn(
83
+ 'url', array(
84
+ 'header' => Mage::helper('internalseolinking')->__('URL'),
85
+ 'align' => 'left',
86
+ 'index' => 'url')
87
+ );
88
+
89
+ $this->addColumn(
90
+ 'title', array(
91
+ 'header' => Mage::helper('internalseolinking')->__('Title'),
92
+ 'align' => 'left',
93
+ 'index' => 'title')
94
+ );
95
+
96
+ $this->addColumn(
97
+ 'is_enabled', array(
98
+ 'header' => Mage::helper('internalseolinking')->__('Enabled'),
99
+ 'align' => 'left',
100
+ 'width' => '75px',
101
+ 'index' => 'is_enabled',
102
+ 'type' => 'options',
103
+ 'options' => array(0 => $this->__('No'), 1 => $this->__('Yes')))
104
+ );
105
+
106
+ return parent::_prepareColumns();
107
+ }
108
+
109
+ /**
110
+ * Get url for row
111
+ *
112
+ * @param string $row
113
+ * @return string
114
+ */
115
+ public function getRowUrl($row)
116
+ {
117
+ return $this->getUrl('*/*/edit', array('isl_id' => $row->getId()));
118
+ }
119
+
120
+ }
app/code/community/Ikantam/Internalseolinking/Helper/Data.php ADDED
@@ -0,0 +1,225 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Internal SEO Linking
4
+ *
5
+ * LICENSE: this source file is subject to the Open Software License (OSL 3.0)
6
+ * that is bundled with this package in the file LICENSE.txt.
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Ikantam
11
+ * @package Ikantam_Internalseolinking
12
+ * @copyright Copyright (c) 2012 iKantam LLC (http://www.ikantam.com)
13
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
14
+ */
15
+
16
+ /**
17
+ * Internalseolinking data helper
18
+ *
19
+ * @category Ikantam
20
+ * @package Ikantam_Internalseolinking
21
+ * @author iKantam Team <support@ikantam.com>
22
+ */
23
+ class Ikantam_Internalseolinking_Helper_Data extends Mage_Core_Helper_Abstract
24
+ {
25
+ /**
26
+ * Prepare category attribute html output
27
+ *
28
+ * @param Mage_Catalog_Helper_Output $helper
29
+ * @param string $attributeHtml
30
+ * @param array $params
31
+ * @return string
32
+ */
33
+ public function categoryAttribute($helper, $attributeHtml, $params)
34
+ {
35
+ if (isset($params['attribute']) && $params['attribute'] === 'description') {
36
+ $attributeHtml = $this->process($attributeHtml);
37
+ }
38
+
39
+ return $attributeHtml;
40
+ }
41
+
42
+ /**
43
+ * Prepare product attribute html output
44
+ *
45
+ * @param Mage_Catalog_Helper_Output $helper
46
+ * @param string $attributeHtml
47
+ * @param array $params
48
+ * @return string
49
+ */
50
+ public function productAttribute($callObject, $attributeHtml, $params)
51
+ {
52
+ if (isset($params['attribute']) && $params['attribute'] === 'description') {
53
+ $attributeHtml = $this->process($attributeHtml);
54
+ }
55
+
56
+ return $attributeHtml;
57
+ }
58
+
59
+ /*
60
+ * Convert keywords into links
61
+ *
62
+ * @param string $html
63
+ * @return string
64
+ */
65
+ public function process($html)
66
+ {
67
+ $globalLimit = $limit = $this->getReplacementLimit();
68
+
69
+ if ($globalLimit <= 0) {
70
+ $globalLimit = $limit = -1;
71
+ }
72
+ $repCount = 0;
73
+
74
+ $dom = new DOMDocument();
75
+ $dom->loadHtml(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'));
76
+ $xpath = new DOMXPath($dom);
77
+ $model = Mage::getModel('internalseolinking/internalseolinking');
78
+ list($replaces, $urls) = $model->getCollection()->getReplaces();
79
+
80
+ foreach ($xpath->query('//text()[not(ancestor::a)]') as $node) {
81
+ if ($node->nodeType === 3) {
82
+ if ($globalLimit > 0) {
83
+ $limit = $globalLimit - $repCount;
84
+ if ($limit < 0) {
85
+ $limit = 0;
86
+ }
87
+ }
88
+ //$replaced = preg_replace($replaces, $urls, htmlentities($node->wholeText), $limit, $count);
89
+ $replaced = preg_replace($replaces, $urls, preg_replace('/[&]([^a])/', '&amp;$1', $node->wholeText), $limit, $count);
90
+ $newNode = $dom->createDocumentFragment();
91
+ @$newNode->appendXML($replaced);
92
+ $node->parentNode->replaceChild($newNode, $node);
93
+ $repCount += $count;
94
+ }
95
+ }
96
+
97
+ return $dom->saveHTML();
98
+ }
99
+
100
+ /**
101
+ * Get current url
102
+ *
103
+ * @return true
104
+ */
105
+ public function getCurrentUrl()
106
+ {
107
+ return Mage::getUrl('*/*/*', array('_current'=>true, '_use_rewrite'=>true));
108
+ }
109
+
110
+ /**
111
+ * Check if current url is url for home page
112
+ *
113
+ * @return true
114
+ */
115
+ public function getIsHomePage()
116
+ {
117
+ return Mage::getUrl('') == Mage::getUrl('*/*/*', array('_current'=>true, '_use_rewrite'=>true));
118
+ }
119
+
120
+ /**
121
+ * Check if current page is CMS page
122
+ *
123
+ * @return boolean
124
+ */
125
+ public function getIsCmsPage()
126
+ {
127
+ return ((int) Mage::getBlockSingleton('cms/page')->getPage()->getData('page_id')) > 0;
128
+ }
129
+
130
+ /**
131
+ * Check if current page is CMS page
132
+ *
133
+ * @return boolean
134
+ */
135
+ public function getIsAwBlogPage()
136
+ {
137
+ if (!Mage::getConfig()->getModuleConfig('AW_Blog')->is('active', 'true')) {
138
+ return false;
139
+ }
140
+
141
+ $request = Mage::app()->getRequest();
142
+ return ($request->getControllerModule() === 'AW_Blog' && $request->getModuleName() === 'blog');
143
+ }
144
+
145
+ /*
146
+ * Get module settings
147
+ *
148
+ * @return boolean
149
+ */
150
+ public function isEnabled()
151
+ {
152
+ return (bool) Mage::getStoreConfig('internalseolinking/module_options/enabled');
153
+ }
154
+
155
+ /*
156
+ * Get module settings
157
+ *
158
+ * @return boolean
159
+ */
160
+ public function shouldProcessHomepage()
161
+ {
162
+ return (bool) Mage::getStoreConfig('internalseolinking/process_options/home');
163
+ }
164
+
165
+ /*
166
+ * Get module settings
167
+ *
168
+ * @return boolean
169
+ */
170
+ public function shouldProcessCmsPage()
171
+ {
172
+ return (bool) Mage::getStoreConfig('internalseolinking/process_options/cms');
173
+ }
174
+
175
+ /*
176
+ * Get module settings
177
+ *
178
+ * @return boolean
179
+ */
180
+ public function shouldProcessCategory()
181
+ {
182
+ return (bool) Mage::getStoreConfig('internalseolinking/process_options/categories');
183
+ }
184
+
185
+ /*
186
+ * Get module settings
187
+ *
188
+ * @return boolean
189
+ */
190
+ public function shouldProcessProduct()
191
+ {
192
+ return (bool) Mage::getStoreConfig('internalseolinking/process_options/products');
193
+ }
194
+
195
+ /*
196
+ * Get module settings
197
+ *
198
+ * @return integer
199
+ */
200
+ public function getReplacementLimit()
201
+ {
202
+ return (int) Mage::getStoreConfig('internalseolinking/process_options/limit');
203
+ }
204
+
205
+ /*
206
+ * Get module settings
207
+ *
208
+ * @return integer
209
+ */
210
+ public function shouldProcessAwBlogPage()
211
+ {
212
+ return (bool) Mage::getStoreConfig('internalseolinking/process_options/awblog');
213
+ }
214
+
215
+ /*
216
+ * Get module settings
217
+ *
218
+ * @return integer
219
+ */
220
+ public function getExceptionList()
221
+ {
222
+ return Mage::getStoreConfig('internalseolinking/process_options/exceptions');
223
+ }
224
+
225
+ }
app/code/community/Ikantam/Internalseolinking/Model/Internalseolinking.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Internal SEO Linking
4
+ *
5
+ * LICENSE: this source file is subject to the Open Software License (OSL 3.0)
6
+ * that is bundled with this package in the file LICENSE.txt.
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Ikantam
11
+ * @package Ikantam_Internalseolinking
12
+ * @copyright Copyright (c) 2012 iKantam LLC (http://www.ikantam.com)
13
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
14
+ */
15
+
16
+ /**
17
+ * Internalseolinking model
18
+ *
19
+ * @category Ikantam
20
+ * @package Ikantam_Internalseolinking
21
+ * @author iKantam Team <support@ikantam.com>
22
+ */
23
+ class Ikantam_Internalseolinking_Model_Internalseolinking extends Mage_Core_Model_Abstract
24
+ {
25
+ /**
26
+ * Initialize resources
27
+ */
28
+ protected function _construct()
29
+ {
30
+ $this->_init('internalseolinking/internalseolinking');
31
+ }
32
+
33
+ }
app/code/community/Ikantam/Internalseolinking/Model/Observer.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Internal SEO Linking
4
+ *
5
+ * LICENSE: this source file is subject to the Open Software License (OSL 3.0)
6
+ * that is bundled with this package in the file LICENSE.txt.
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Ikantam
11
+ * @package Ikantam_Internalseolinking
12
+ * @copyright Copyright (c) 2012 iKantam LLC (http://www.ikantam.com)
13
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
14
+ */
15
+
16
+ /**
17
+ * Internalseolinking observer
18
+ *
19
+ * @category Ikantam
20
+ * @package Ikantam_Internalseolinking
21
+ * @author iKantam Team <support@ikantam.com>
22
+ */
23
+ class Ikantam_Internalseolinking_Model_Observer
24
+ {
25
+ /**
26
+ * Assign category and product attribute handlers
27
+ *
28
+ * @param Varien_Event_Observer $observer
29
+ * @return Ikantam_Internalseolinking_Model_Observer
30
+ */
31
+ public function assignHandlers($observer)
32
+ {
33
+ $catalogHelper = $observer->getEvent()->getHelper();
34
+ $moduleHelper = Mage::helper('internalseolinking');
35
+
36
+ if (!$moduleHelper->isEnabled()) {
37
+ return $this;
38
+ }
39
+
40
+ if ($moduleHelper->shouldProcessCategory()) {
41
+ $catalogHelper->addHandler('categoryAttribute', $moduleHelper);
42
+ }
43
+
44
+ if ($moduleHelper->shouldProcessProduct()) {
45
+ $catalogHelper->addHandler('productAttribute', $moduleHelper);
46
+ }
47
+
48
+ return $this;
49
+ }
50
+ }
app/code/community/Ikantam/Internalseolinking/Model/Resource/Internalseolinking.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Internal SEO Linking
4
+ *
5
+ * LICENSE: this source file is subject to the Open Software License (OSL 3.0)
6
+ * that is bundled with this package in the file LICENSE.txt.
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Ikantam
11
+ * @package Ikantam_Internalseolinking
12
+ * @copyright Copyright (c) 2012 iKantam LLC (http://www.ikantam.com)
13
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
14
+ */
15
+
16
+ /**
17
+ * Internalseolinking resource model
18
+ *
19
+ * @category Ikantam
20
+ * @package Ikantam_Internalseolinking
21
+ * @author iKantam Team <support@ikantam.com>
22
+ */
23
+ class Ikantam_Internalseolinking_Model_Resource_Internalseolinking extends Mage_Core_Model_Resource_Db_Abstract
24
+ {
25
+ protected function _construct()
26
+ {
27
+ $this->_init('internalseolinking/internalseolinking', 'id');
28
+ }
29
+
30
+ }
app/code/community/Ikantam/Internalseolinking/Model/Resource/Internalseolinking/Collection.php ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Internal SEO Linking
4
+ *
5
+ * LICENSE: this source file is subject to the Open Software License (OSL 3.0)
6
+ * that is bundled with this package in the file LICENSE.txt.
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Ikantam
11
+ * @package Ikantam_Internalseolinking
12
+ * @copyright Copyright (c) 2012 iKantam LLC (http://www.ikantam.com)
13
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
14
+ */
15
+
16
+ /**
17
+ * Internalseolinking collection
18
+ *
19
+ * @category Ikantam
20
+ * @package Ikantam_Internalseolinking
21
+ * @author iKantam Team <support@ikantam.com>
22
+ */
23
+ class Ikantam_Internalseolinking_Model_Resource_Internalseolinking_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract
24
+ {
25
+ /**
26
+ * Initialize resources
27
+ *
28
+ */
29
+ public function _construct()
30
+ {
31
+ $this->_init('internalseolinking/internalseolinking');
32
+ }
33
+
34
+ /*
35
+ * Prepare regex and replacement arrays
36
+ *
37
+ * @return list
38
+ */
39
+ public function getReplaces()
40
+ {
41
+ $excludes = explode(",", Mage::helper('internalseolinking')->getExceptionList());
42
+
43
+ $replaces = $urls = array();
44
+ $this->addFilter('is_enabled', '1');
45
+ foreach ($this as $row) {
46
+ if (Mage::helper('core/url')->getCurrentUrl() == $row->getUrl()) {
47
+ continue;//do not allow self-linking
48
+ }
49
+
50
+ if (in_array(Mage::helper('core/url')->getCurrentUrl(), $excludes)) {
51
+ continue;//check exception list
52
+ }
53
+
54
+ $words = explode(',', $row->getKeywords());
55
+
56
+ foreach ($words as $word) {
57
+ $replaces[] = '/' . '\b(' . preg_quote($word, '/') . ')\b' . '/iu';
58
+ $urls[] = $this->getIslLink($row);
59
+ }
60
+ }
61
+
62
+ return array($replaces, $urls);
63
+ }
64
+
65
+ /*
66
+ * Get link element for current keyword
67
+ *
68
+ * @param Ikantam_Internalseolinking_Model_Internalseolinking $row
69
+ * @return string
70
+ */
71
+ protected function getIslLink($row)
72
+ {
73
+ $target = $row->getTargetBlank() ? '_blank' : '_self';
74
+
75
+ if ($row->getTitle()) {
76
+ $link = '<a target="'. $target . '" href="' . $row->getUrl() . '">';
77
+
78
+ if ($row->getIsBold()) {
79
+ $link .= '<b>';
80
+ }
81
+
82
+ if ($row->getIsItalic()) {
83
+ $link .= '<i>';
84
+ }
85
+
86
+ $link .= $row->getTitle();
87
+
88
+ if ($row->getIsItalic()) {
89
+ $link .= '</i>';
90
+ }
91
+
92
+ if ($row->getIsBold()) {
93
+ $link .= '</b>';
94
+ }
95
+
96
+ $link .= '</a>';
97
+ } else {
98
+ $link = '<a target="'. $target . '" href="' . $row->getUrl() . '">';
99
+
100
+ if ($row->getIsBold()) {
101
+ $link .= '<b>';
102
+ }
103
+
104
+ if ($row->getIsItalic()) {
105
+ $link .= '<i>';
106
+ }
107
+
108
+ $link .= '$1';
109
+
110
+ if ($row->getIsItalic()) {
111
+ $link .= '</i>';
112
+ }
113
+
114
+ if ($row->getIsBold()) {
115
+ $link .= '</b>';
116
+ }
117
+
118
+ $link .= '</a>';
119
+ }
120
+
121
+ return $link;
122
+ }
123
+
124
+ }
app/code/community/Ikantam/Internalseolinking/Model/Resource/Setup.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Internal SEO Linking
4
+ *
5
+ * LICENSE: this source file is subject to the Open Software License (OSL 3.0)
6
+ * that is bundled with this package in the file LICENSE.txt.
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Ikantam
11
+ * @package Ikantam_Internalseolinking
12
+ * @copyright Copyright (c) 2012 iKantam LLC (http://www.ikantam.com)
13
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
14
+ */
15
+
16
+ /**
17
+ * Internalseolinking resource setup
18
+ *
19
+ * @category Ikantam
20
+ * @package Ikantam_Internalseolinking
21
+ * @author iKantam Team <support@ikantam.com>
22
+ */
23
+ class Ikantam_Internalseolinking_Model_Resource_Setup extends Mage_Core_Model_Resource_Setup
24
+ {
25
+
26
+ }
app/code/community/Ikantam/Internalseolinking/Model/Template/Filter.php ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Internal SEO Linking
4
+ *
5
+ * LICENSE: this source file is subject to the Open Software License (OSL 3.0)
6
+ * that is bundled with this package in the file LICENSE.txt.
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Ikantam
11
+ * @package Ikantam_Internalseolinking
12
+ * @copyright Copyright (c) 2012 iKantam LLC (http://www.ikantam.com)
13
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
14
+ */
15
+
16
+ /**
17
+ * Internalseolinking page content block
18
+ *
19
+ * @category Ikantam
20
+ * @package Ikantam_Internalseolinking
21
+ * @author iKantam Team <support@ikantam.com>
22
+ */
23
+ class Ikantam_Internalseolinking_Model_Template_Filter extends Mage_Widget_Model_Template_Filter
24
+ {
25
+ /**
26
+ * Process CMS page content
27
+ *
28
+ * @param string $html
29
+ * @return string
30
+ */
31
+ public function filter($html)
32
+ {
33
+ $html = parent::filter($html);
34
+
35
+ $moduleHelper = Mage::helper('internalseolinking');
36
+
37
+ if (!$moduleHelper->isEnabled()) {
38
+ return $html;
39
+ }
40
+
41
+ if ($moduleHelper->getIsHomePage() && !$moduleHelper->shouldProcessHomepage()) {
42
+ return $html;
43
+ }
44
+
45
+ if ($moduleHelper->getIsCmsPage() && !$moduleHelper->shouldProcessCmsPage()) {
46
+ return $html;
47
+ }
48
+
49
+ if ($moduleHelper->getIsAwBlogPage() && !$moduleHelper->shouldProcessAwBlogPage()) {
50
+ return $html;
51
+ }
52
+
53
+ $html = $moduleHelper->process($html);
54
+
55
+ return $html;
56
+ }
57
+
58
+ }
app/code/community/Ikantam/Internalseolinking/controllers/Adminhtml/InternalseolinkingController.php ADDED
@@ -0,0 +1,179 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * iKantam
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * @category Ikantam
13
+ * @package Ikantam_Internalseolinking
14
+ * @copyright Copyright (c) 2012 iKantam LLC (http://www.ikantam.com)
15
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
16
+ */
17
+
18
+ /**
19
+ * Adminhtml Internalseolinking controller
20
+ *
21
+ * @category Ikantam
22
+ * @package Ikantam_Internalseolinking
23
+ * @author iKantam Magento Team <support@ikantam.com>
24
+ */
25
+ class Ikantam_Internalseolinking_Adminhtml_InternalseolinkingController extends Mage_Adminhtml_Controller_Action
26
+ {
27
+ /**
28
+ * Additional initialization
29
+ *
30
+ */
31
+ protected function _construct()
32
+ {
33
+ $this->setUsedModuleName('Ikantam_Internalseolinking');
34
+ }
35
+
36
+ /**
37
+ * Init layout, menu and breadcrumb
38
+ *
39
+ * @return Ikantam_Internalseolinking_Adminhtml_InternalseolinkingController
40
+ */
41
+ protected function _initAction()
42
+ {
43
+ $this->loadLayout()
44
+ ->_setActiveMenu('internalseolinking/internalseolinking')
45
+ ->_addBreadcrumb($this->__('Internal SEO Linking'), $this->__('Internal SEO Linking'));
46
+ return $this;
47
+ }
48
+
49
+ /**
50
+ * Initialize Internalseolinking model instance
51
+ *
52
+ * @return Ikantam_Internalseolinking_Model_Internalseolinking || false
53
+ */
54
+ protected function _initInternalSeoLink()
55
+ {
56
+ $model = Mage::getModel('internalseolinking/internalseolinking');
57
+ $id = $this->getRequest()->getParam('isl_id');
58
+
59
+ if ($id) {
60
+ $model->load($id);
61
+ if (!$model->getId()) {
62
+ return false;
63
+ }
64
+ }
65
+
66
+ Mage::register('current_internalseolink', $model);
67
+ return $model;
68
+ }
69
+
70
+
71
+ /**
72
+ * Internal SEO Links grid
73
+ *
74
+ */
75
+ public function indexAction()
76
+ {
77
+ $this->_title($this->__('Internal SEO Linking'));
78
+ $this->_initAction()->renderLayout();
79
+ }
80
+
81
+ /**
82
+ * Edit Internal SEO Link action
83
+ *
84
+ */
85
+ public function editAction()
86
+ {
87
+ $this->_title($this->__('Internal SEO Linking'));
88
+
89
+ $helper = Mage::helper('internalseolinking');
90
+ $session = Mage::getSingleton('adminhtml/session');
91
+
92
+ if (!($model = $this->_initInternalSeoLink())) {
93
+ $session->addError($helper->__('Wrong Internal SEO Link was specified'));
94
+ return $this->_redirect('*/*/index', array('store' => $this->getRequest()->getParam('store')));
95
+ }
96
+
97
+ $data = $session->getInternalseolinkingData(true);
98
+ if (!empty($data)) {
99
+ $model->addData($data);
100
+ }
101
+
102
+ $this->_title($model->getId() ? 'Record #' . $model->getId() : $this->__('New Internal SEO Link'));
103
+ $this->_initAction()->renderLayout();
104
+ }
105
+
106
+ /**
107
+ * New Internal SEO Link action
108
+ *
109
+ */
110
+ public function newAction()
111
+ {
112
+ $this->_forward('edit');
113
+ }
114
+
115
+ /**
116
+ * Save Internal SEO Link action
117
+ *
118
+ */
119
+ public function saveAction()
120
+ {
121
+ $data = $this->getRequest()->getPost();
122
+ $helper = Mage::helper('internalseolinking');
123
+ $session = Mage::getSingleton('adminhtml/session');
124
+
125
+ if ($data) {
126
+ try {
127
+ if (!$model = $this->_initInternalSeoLink()) {
128
+ $session->addError($helper->__('Wrong Internal SEO Link was specified'));
129
+ return $this->_redirect('*/*/index');
130
+ }
131
+
132
+ $model->addData($data)->save();
133
+
134
+ $session->addSuccess($helper->__('Internal SEO Link was successfully saved'));
135
+ $session->setInternalseolinkingData(false);
136
+
137
+ $continue = $this->getRequest()->getParam('back');
138
+
139
+ if ($continue) {
140
+ return $this->_redirect('*/*/edit', array('isl_id' => $model->getId(), 'ret' => $continue));
141
+ } else {
142
+ return $this->_redirect('*/*/' . $this->getRequest()->getParam('ret', 'index'));
143
+ }
144
+ } catch (Exception $e) {
145
+ $session->addError($e->getMessage());
146
+ $session->setInternalseolinkingData($data);
147
+
148
+ return $this->_redirect('*/*/edit', array('isl_id' => $model->getId()));
149
+ }
150
+ }
151
+
152
+ return $this->_redirect('*/*/index', array('_current' => true));
153
+ }
154
+
155
+ /**
156
+ * Delete Internal SEO Link action
157
+ *
158
+ */
159
+ public function deleteAction()
160
+ {
161
+ $model = $this->_initInternalSeoLink();
162
+ $helper = Mage::helper('internalseolinking');
163
+ $session = Mage::getSingleton('adminhtml/session');
164
+
165
+ if ($model && $model->getId()) {
166
+ try {
167
+ $model->delete();
168
+ $session->addSuccess($helper->__('The Internal SEO Link has been deleted'));
169
+ } catch (Exception $e) {
170
+ $session->addError($e->getMessage());
171
+ }
172
+ } else {
173
+ $session->addError($helper->__('Unable to find an Internal SEO Link to delete'));
174
+ }
175
+
176
+ $this->getResponse()->setRedirect($this->getUrl('*/*/index'));
177
+ }
178
+
179
+ }
app/code/community/Ikantam/Internalseolinking/etc/adminhtml.xml ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ /**
4
+ * Internal SEO Linking
5
+ *
6
+ * LICENSE: this source file is subject to the Open Software License (OSL 3.0)
7
+ * that is bundled with this package in the file LICENSE.txt.
8
+ * It is also available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ *
11
+ * @category Ikantam
12
+ * @package Ikantam_Internalseolinking
13
+ * @copyright Copyright (c) 2012 iKantam LLC (http://www.ikantam.com)
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+ -->
17
+ <config>
18
+ <menu>
19
+ <ikantam module="internalseolinking" translate="title">
20
+ <title>iKantam</title>
21
+ <sort_order>100</sort_order>
22
+ <children>
23
+ <internalseolinking module="internalseolinking" translate="title">
24
+ <title>Internal SEO Linking</title>
25
+ <sort_order>10</sort_order>
26
+ <action>internalseolinking/adminhtml_internalseolinking</action>
27
+ </internalseolinking>
28
+ </children>
29
+ </ikantam>
30
+ </menu>
31
+
32
+ <acl>
33
+ <resources>
34
+ <admin>
35
+ <children>
36
+ <ikantam translate="title" module="internalseolinking">
37
+ <title>iKantam</title>
38
+ <sort_order>1000</sort_order>
39
+ <children>
40
+ <internalseolinking translate="title">
41
+ <title>Internal SEO Linking</title>
42
+ <sort_order>10</sort_order>
43
+ </internalseolinking>
44
+ </children>
45
+ </ikantam>
46
+
47
+ <system>
48
+ <children>
49
+ <config>
50
+ <children>
51
+ <internalseolinking translate="title">
52
+ <title>iKantam - Internal SEO Linking</title>
53
+ </internalseolinking>
54
+ </children>
55
+ </config>
56
+ </children>
57
+ </system>
58
+ </children>
59
+ </admin>
60
+ </resources>
61
+ </acl>
62
+
63
+ </config>
app/code/community/Ikantam/Internalseolinking/etc/config.xml ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ /**
4
+ * Internal SEO Linking
5
+ *
6
+ * LICENSE: this source file is subject to the Open Software License (OSL 3.0)
7
+ * that is bundled with this package in the file LICENSE.txt.
8
+ * It is also available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ *
11
+ * @category Ikantam
12
+ * @package Ikantam_Internalseolinking
13
+ * @copyright Copyright (c) 2012 iKantam LLC (http://www.ikantam.com)
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+ -->
17
+ <config>
18
+ <modules>
19
+ <Ikantam_Internalseolinking>
20
+ <version>0.1.0</version>
21
+ </Ikantam_Internalseolinking>
22
+ </modules>
23
+
24
+ <frontend>
25
+ <events>
26
+ <catalog_helper_output_construct>
27
+ <observers>
28
+ <internalseolinking>
29
+ <class>internalseolinking/observer</class>
30
+ <method>assignHandlers</method>
31
+ </internalseolinking>
32
+ </observers>
33
+ </catalog_helper_output_construct>
34
+ </events>
35
+ </frontend>
36
+
37
+ <global>
38
+ <helpers>
39
+ <internalseolinking>
40
+ <class>Ikantam_Internalseolinking_Helper</class>
41
+ </internalseolinking>
42
+ </helpers>
43
+
44
+ <blocks>
45
+ <internalseolinking>
46
+ <class>Ikantam_Internalseolinking_Block</class>
47
+ </internalseolinking>
48
+ </blocks>
49
+
50
+ <models>
51
+ <widget>
52
+ <rewrite>
53
+ <template_filter>Ikantam_Internalseolinking_Model_Template_Filter</template_filter>
54
+ </rewrite>
55
+ </widget>
56
+
57
+ <internalseolinking>
58
+ <class>Ikantam_Internalseolinking_Model</class>
59
+ <resourceModel>internalseolinking_resource</resourceModel>
60
+ </internalseolinking>
61
+
62
+ <internalseolinking_resource>
63
+ <class>Ikantam_Internalseolinking_Model_Resource</class>
64
+ <entities>
65
+ <internalseolinking>
66
+ <table>ikantam_internalseolinking</table>
67
+ </internalseolinking>
68
+ </entities>
69
+ </internalseolinking_resource>
70
+ </models>
71
+
72
+ <resources>
73
+ <internalseolinking_setup>
74
+ <setup>
75
+ <module>Ikantam_Internalseolinking</module>
76
+ <class>Ikantam_Internalseolinking_Model_Resource_Setup</class>
77
+ </setup>
78
+ </internalseolinking_setup>
79
+ </resources>
80
+ </global>
81
+
82
+ <admin>
83
+ <routers>
84
+ <internalseolinking>
85
+ <use>admin</use>
86
+ <args>
87
+ <module>Ikantam_Internalseolinking</module>
88
+ <frontName>internalseolinking</frontName>
89
+ </args>
90
+ </internalseolinking>
91
+ </routers>
92
+ </admin>
93
+
94
+ <adminhtml>
95
+ <layout>
96
+ <updates>
97
+ <internalseolinking>
98
+ <file>internalseolinking.xml</file>
99
+ </internalseolinking>
100
+ </updates>
101
+ </layout>
102
+
103
+ <translate>
104
+ <modules>
105
+ <Ikantam_Internalseolinking>
106
+ <files>
107
+ <default>Ikantam_Internalseolinking.csv</default>
108
+ </files>
109
+ </Ikantam_Internalseolinking>
110
+ </modules>
111
+ </translate>
112
+ </adminhtml>
113
+
114
+ </config>
app/code/community/Ikantam/Internalseolinking/etc/system.xml ADDED
@@ -0,0 +1,145 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ /**
4
+ * Internal SEO Linking
5
+ *
6
+ * LICENSE: this source file is subject to the Open Software License (OSL 3.0)
7
+ * that is bundled with this package in the file LICENSE.txt.
8
+ * It is also available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ *
11
+ * @category Ikantam
12
+ * @package Ikantam_Internalseolinking
13
+ * @copyright Copyright (c) 2012 iKantam LLC (http://www.ikantam.com)
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+ -->
17
+ <config>
18
+ <tabs>
19
+ <ikantam translate="label" module="internalseolinking">
20
+ <label>iKantam</label>
21
+ <sort_order>9999999</sort_order>
22
+ </ikantam>
23
+ </tabs>
24
+
25
+ <sections>
26
+ <internalseolinking translate="label" module="internalseolinking">
27
+ <label>Internal SEO Linking</label>
28
+ <tab>ikantam</tab>
29
+ <sort_order>1000</sort_order>
30
+ <show_in_default>1</show_in_default>
31
+ <show_in_website>1</show_in_website>
32
+ <show_in_store>1</show_in_store>
33
+
34
+ <groups>
35
+ <module_options translate="label" module="internalseolinking">
36
+ <label>Module Options</label>
37
+ <frontend_type>text</frontend_type>
38
+ <sort_order>10</sort_order>
39
+ <show_in_default>1</show_in_default>
40
+ <show_in_website>1</show_in_website>
41
+ <show_in_store>1</show_in_store>
42
+
43
+ <fields>
44
+ <enabled translate="label">
45
+ <label>Enabled: </label>
46
+ <frontend_type>select</frontend_type>
47
+ <sort_order>10</sort_order>
48
+ <show_in_default>1</show_in_default>
49
+ <show_in_website>1</show_in_website>
50
+ <show_in_store>1</show_in_store>
51
+ <source_model>adminhtml/system_config_source_yesno</source_model>
52
+ </enabled>
53
+ </fields>
54
+ </module_options>
55
+
56
+ <process_options translate="label" module="internalseolinking">
57
+ <label>Processing Options</label>
58
+ <frontend_type>text</frontend_type>
59
+ <sort_order>20</sort_order>
60
+ <show_in_default>1</show_in_default>
61
+ <show_in_website>1</show_in_website>
62
+ <show_in_store>1</show_in_store>
63
+
64
+ <fields>
65
+ <limit translate="label comment">
66
+ <label>Max # of replacements per page: </label>
67
+ <comment>Zero or empty for no limit</comment>
68
+ <frontend_type>text</frontend_type>
69
+ <sort_order>10</sort_order>
70
+ <show_in_default>1</show_in_default>
71
+ <show_in_website>1</show_in_website>
72
+ <show_in_store>1</show_in_store>
73
+ </limit>
74
+
75
+ <home translate="label comment">
76
+ <label>Home page: </label>
77
+ <comment>Process home page</comment>
78
+ <frontend_type>select</frontend_type>
79
+ <sort_order>30</sort_order>
80
+ <show_in_default>1</show_in_default>
81
+ <show_in_website>1</show_in_website>
82
+ <show_in_store>1</show_in_store>
83
+ <source_model>adminhtml/system_config_source_yesno</source_model>
84
+ </home>
85
+
86
+ <cms translate="label comment">
87
+ <label>CMS pages: </label>
88
+ <comment>Process CMS pages</comment>
89
+ <frontend_type>select</frontend_type>
90
+ <sort_order>40</sort_order>
91
+ <show_in_default>1</show_in_default>
92
+ <show_in_website>1</show_in_website>
93
+ <show_in_store>1</show_in_store>
94
+ <source_model>adminhtml/system_config_source_yesno</source_model>
95
+ </cms>
96
+
97
+ <products translate="label comment">
98
+ <label>Product descriptions: </label>
99
+ <comment>Process product descriptions</comment>
100
+ <frontend_type>select</frontend_type>
101
+ <sort_order>50</sort_order>
102
+ <show_in_default>1</show_in_default>
103
+ <show_in_website>1</show_in_website>
104
+ <show_in_store>1</show_in_store>
105
+ <source_model>adminhtml/system_config_source_yesno</source_model>
106
+ </products>
107
+
108
+ <categories translate="label comment">
109
+ <label>Category descriptions: </label>
110
+ <comment>Process category descriptions</comment>
111
+ <frontend_type>select</frontend_type>
112
+ <sort_order>60</sort_order>
113
+ <show_in_default>1</show_in_default>
114
+ <show_in_website>1</show_in_website>
115
+ <show_in_store>1</show_in_store>
116
+ <source_model>adminhtml/system_config_source_yesno</source_model>
117
+ </categories>
118
+
119
+ <awblog translate="label comment">
120
+ <label>AheadWorks Blog: </label>
121
+ <comment>Process AheadWorks blog pages</comment>
122
+ <frontend_type>select</frontend_type>
123
+ <sort_order>70</sort_order>
124
+ <show_in_default>1</show_in_default>
125
+ <show_in_website>1</show_in_website>
126
+ <show_in_store>1</show_in_store>
127
+ <source_model>adminhtml/system_config_source_yesno</source_model>
128
+ </awblog>
129
+
130
+ <exceptions translate="label comment">
131
+ <label>Exception list: </label>
132
+ <comment>List URL's (comma separated) that should be excluded from the extension actions</comment>
133
+ <frontend_type>textarea</frontend_type>
134
+ <sort_order>80</sort_order>
135
+ <show_in_default>1</show_in_default>
136
+ <show_in_website>1</show_in_website>
137
+ <show_in_store>1</show_in_store>
138
+ </exceptions>
139
+ </fields>
140
+ </process_options>
141
+ </groups>
142
+ </internalseolinking>
143
+ </sections>
144
+
145
+ </config>
app/code/community/Ikantam/Internalseolinking/sql/internalseolinking_setup/mysql4-install-0.1.0.php ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Internal SEO Linking
4
+ *
5
+ * LICENSE: this source file is subject to the Open Software License (OSL 3.0)
6
+ * that is bundled with this package in the file LICENSE.txt.
7
+ * It is also available through the world-wide-web at this URL:
8
+ * http://opensource.org/licenses/osl-3.0.php
9
+ *
10
+ * @category Ikantam
11
+ * @package Ikantam_Internalseolinking
12
+ * @copyright Copyright (c) 2012 iKantam LLC (http://www.ikantam.com)
13
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
14
+ */
15
+
16
+ /* @var $installer Mage_Core_Model_Resource_Setup */
17
+ $installer = $this;
18
+
19
+ $installer->startSetup();
20
+
21
+ /**
22
+ * Create table 'internalseolinking/internalseolinking'
23
+ */
24
+ $table = $installer->getConnection()
25
+ ->newTable($installer->getTable('internalseolinking/internalseolinking'))
26
+
27
+ ->addColumn(
28
+ 'id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
29
+ 'identity' => true,
30
+ 'unsigned' => true,
31
+ 'nullable' => false,
32
+ 'primary' => true,
33
+ ), 'Internal SEO Link ID'
34
+ )
35
+
36
+ ->addColumn(
37
+ 'keywords', Varien_Db_Ddl_Table::TYPE_TEXT, null, array(
38
+ 'nullable' => false,
39
+ ), 'Internal SEO Link Keywords'
40
+ )
41
+
42
+ ->addColumn(
43
+ 'url', Varien_Db_Ddl_Table::TYPE_VARCHAR, 255, array(
44
+ 'nullable' => false,
45
+ ), 'Internal SEO Link URL'
46
+ )
47
+
48
+ ->addColumn(
49
+ 'title', Varien_Db_Ddl_Table::TYPE_VARCHAR, 255, array(
50
+ 'nullable' => true,
51
+ 'default' => null,
52
+ ), 'Internal SEO Link Title'
53
+ )
54
+
55
+ ->addColumn(
56
+ 'is_enabled', Varien_Db_Ddl_Table::TYPE_SMALLINT, null, array(
57
+ 'unsigned' => true,
58
+ 'nullable' => false,
59
+ 'default' => '0',
60
+ ), 'Internal SEO Link is Enabled'
61
+ )
62
+
63
+ ->addColumn(
64
+ 'target_blank', Varien_Db_Ddl_Table::TYPE_SMALLINT, null, array(
65
+ 'unsigned' => true,
66
+ 'nullable' => false,
67
+ 'default' => '0',
68
+ ), 'Internal SEO Link Target is "_blank"'
69
+ )
70
+
71
+ ->addColumn(
72
+ 'is_bold', Varien_Db_Ddl_Table::TYPE_SMALLINT, null, array(
73
+ 'unsigned' => true,
74
+ 'nullable' => false,
75
+ 'default' => '0',
76
+ ), 'Internal SEO Link is Bold'
77
+ )
78
+
79
+ ->addColumn(
80
+ 'is_italic', Varien_Db_Ddl_Table::TYPE_SMALLINT, null, array(
81
+ 'unsigned' => true,
82
+ 'nullable' => false,
83
+ 'default' => '0',
84
+ ), 'Internal SEO Link is Italic'
85
+ );
86
+
87
+ $installer->getConnection()->createTable($table);
88
+
89
+ $installer->endSetup();
app/design/adminhtml/default/default/layout/internalseolinking.xml ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ /**
4
+ * Internal SEO Linking
5
+ *
6
+ * LICENSE: this source file is subject to the Open Software License (OSL 3.0)
7
+ * that is bundled with this package in the file LICENSE.txt.
8
+ * It is also available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ *
11
+ * @category Ikantam
12
+ * @package Ikantam_Internalseolinking
13
+ * @copyright Copyright (c) 2012 iKantam LLC (http://www.ikantam.com)
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+ -->
17
+ <layout version="0.1.0">
18
+ <internalseolinking_adminhtml_internalseolinking_index>
19
+ <reference name="content">
20
+ <block type="internalseolinking/adminhtml_internalseolinking" name="internalseolinking" />
21
+ </reference>
22
+ </internalseolinking_adminhtml_internalseolinking_index>
23
+
24
+ <internalseolinking_adminhtml_internalseolinking_edit>
25
+ <reference name="content">
26
+ <block type="internalseolinking/adminhtml_internalseolinking_edit" name="internalseolinking_edit"></block>
27
+ </reference>
28
+ <reference name="left">
29
+ <block type="internalseolinking/adminhtml_internalseolinking_edit_tabs" name="internalseolinking_tabs"></block>
30
+ </reference>
31
+ </internalseolinking_adminhtml_internalseolinking_edit>
32
+ </layout>
app/etc/modules/Ikantam_Internalseolinking.xml ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * iKantam
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ *
13
+ * @category Ikantam
14
+ * @package Ikantam_Internalseolinking
15
+ * @copyright Copyright (c) 2012 iKantam LLC (http://www.ikantam.com)
16
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
17
+ */
18
+ -->
19
+ <config>
20
+ <modules>
21
+ <Ikantam_Internalseolinking>
22
+ <active>true</active>
23
+ <codePool>community</codePool>
24
+ <depends />
25
+ </Ikantam_Internalseolinking>
26
+ </modules>
27
+ </config>
app/locale/en_US/Ikantam_Internalseolinking.csv ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "iKantam","iKantam"
2
+ "Internal SEO Linking","Internal SEO Linking"
3
+ "iKantam - Internal SEO Linking","iKantam - Internal SEO Linking"
4
+ "Module Options","Module Options"
5
+ "Enabled: ","Enabled: "
6
+ "Processing Options","Processing Options"
7
+ "Max # of replacements per page: ","Max # of replacements per page: "
8
+ "Zero or empty for no limit","Zero or empty for no limit"
9
+ "Home page: ","Home page: "
10
+ "Process home page","Process home page"
11
+ "CMS pages: ","CMS pages: "
12
+ "Process CMS pages","Process CMS pages"
13
+ "Product descriptions: ","Product descriptions: "
14
+ "Process product descriptions",""Process product descriptions"
15
+ "Category descriptions: ","Category descriptions: "
16
+ "Process category descriptions","Process category descriptions"
17
+ "Internal SEO Linking Manager","Internal SEO Linking Manager"
18
+ "Add New Record","Add New Record"
19
+ "ID","ID"
20
+ "Keywords","Keywords"
21
+ "URL","URL"
22
+ "Title","Title"
23
+ "Enabled","Enabled"
24
+ "No","No"
25
+ "Yes","Yes"
26
+ "Record Information","Record Information"
27
+ "Make it Bold","Make it Bold"
28
+ "Use Italics","Use Italics"
29
+ "Wrong Internal SEO Link was specified","Wrong Internal SEO Link was specified"
30
+ "New Internal SEO Link","New Internal SEO Link"
31
+ "Internal SEO Link was successfully saved","Internal SEO Link was successfully saved"
32
+ "The Internal SEO Link has been deleted","The Internal SEO Link has been deleted"
33
+ "Unable to find an Internal SEO Link to delete","Unable to find an Internal SEO Link to delete"
34
+ "Save Record","Save Record"
35
+ "Delete Record","Delete Record"
36
+ "New Record","New Record"
37
+ "Edit Record #%s","Edit Record #%s"
38
+ "Exception list: ","Exception list: "
39
+ "List URL's (comma separated) that should be excluded from the extension actions","List URL's (comma separated) that should be excluded from the extension actions"
package.xml ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>iKantam_Internal_SEO_Linking</name>
4
+ <version>0.1.0</version>
5
+ <stability>stable</stability>
6
+ <license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License (OSL) v3.0</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>Internal SEO Linking Extension by iKantam</summary>
10
+ <description>&lt;h2&gt;Why do you require this extension: &lt;/h2&gt;&#xD;
11
+ &lt;p&gt;This free extension provides a number of benefits to improve your search engine rankings with no money spent. Actually it provides you with free SEO services.&lt;/p&gt;&#xD;
12
+ &lt;p&gt;Wisely targeting a limited number of keywords you will be able to observe search engine rankings improved over a short period of time. So, the reasons why you should consider installing this extension:&lt;/p&gt;&#xD;
13
+ &lt;ul&gt;&#xD;
14
+ &lt;li&gt;It is free&lt;/li&gt;&#xD;
15
+ &lt;li&gt;It improves your search engine rankings (Google, Bing, Yahoo, etc.)&lt;/li&gt;&#xD;
16
+ &lt;li&gt;It provides you with free SEO services&lt;/li&gt;&#xD;
17
+ &lt;li&gt;It improves your visitor&#x2019;s experience with better interlinking your store pages&lt;/li&gt;&#xD;
18
+ &lt;/ul&gt;&#xD;
19
+ &lt;h2&gt;How it works:&lt;/h2&gt;&#xD;
20
+ &lt;p&gt;You decide what pages (category, product, etc.) require link value passed and when they require it (say, this month you need to promote new products or products with high margin) and distribute this value with 100% control on your side.&lt;/p&gt;&#xD;
21
+ &lt;p&gt;Do you happen to have aHeadWorks blog extension installed? Then our extension is a must as you can turn your blog posts into a valuable source of link juice &#x2013; blog content is likely to attract external links and our extension allows this external links weight flow to your store product and category pages&#x2026;&lt;/p&gt;&#xD;
22
+ &lt;h2&gt;Extension features include: &lt;/h2&gt;&#xD;
23
+ &lt;ul&gt;&#xD;
24
+ &lt;li&gt;Add selected keywords&lt;/li&gt;&#xD;
25
+ &lt;li&gt;Add defined anchor texts&lt;/li&gt;&#xD;
26
+ &lt;li&gt;Add defined URL&#x2019;s&lt;/li&gt;&#xD;
27
+ &lt;li&gt;Define replace limits&lt;/li&gt;&#xD;
28
+ &lt;li&gt;Define what pages to enable for the extension (home page, CMS, category or product (product description) pages)&lt;/li&gt;&#xD;
29
+ &lt;/ul&gt;</description>
30
+ <notes>First Stable Release</notes>
31
+ <authors><author><name>iKantam LLC</name><user>iKantam_</user><email>support@ikantam.com</email></author></authors>
32
+ <date>2012-05-30</date>
33
+ <time>14:38:20</time>
34
+ <contents><target name="magecommunity"><dir name="Ikantam"><dir name="Internalseolinking"><dir name="Block"><dir name="Adminhtml"><dir name="Internalseolinking"><dir name="Edit"><file name="Form.php" hash="2a5672206af629c12f1a836c718e092a"/><dir name="Tab"><file name="Form.php" hash="77e25c6a8ff0524c52aa8349b0018e95"/></dir><file name="Tabs.php" hash="7b2196deb6a4206e30a120f5c1385bee"/></dir><file name="Edit.php" hash="3f917f5ad0299a0d811a1f5773335492"/><file name="Grid.php" hash="8c600e389d67e2ca22dff3ef318d6196"/></dir><file name="Internalseolinking.php" hash="2f3bc667cf65df2a6d2b0b2d83e83d52"/></dir></dir><dir name="Helper"><file name="Data.php" hash="12c8f5780d7db445d60e1af27d6b05d1"/></dir><dir name="Model"><file name="Internalseolinking.php" hash="d4e08f9f126f06eb21f985cf70c46c7e"/><file name="Observer.php" hash="61b2e1e43ed6ed54a5d3177c92d5ebca"/><dir name="Resource"><dir name="Internalseolinking"><file name="Collection.php" hash="2b2cce53ebbda609c1216da98a801517"/></dir><file name="Internalseolinking.php" hash="9cd9994988d5a99555804e2288c4bec6"/><file name="Setup.php" hash="2a516f5cf4a09a7be32bdf7c4177ff97"/></dir><dir name="Template"><file name="Filter.php" hash="77301a8b6a9b2ed4faafef16f226b945"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="InternalseolinkingController.php" hash="dd5603abe96e4c261933569340a37e39"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="b5719893bcd60fa118cdaeeb3f4faf7e"/><file name="config.xml" hash="991d356a119bd0d06029ac8968fca430"/><file name="system.xml" hash="8674051bbf7293457d2dd876b3ca0bb6"/></dir><dir name="sql"><dir name="internalseolinking_setup"><file name="mysql4-install-0.1.0.php" hash="306ed2a715dd9c0598e9e1240543bc9b"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Ikantam_Internalseolinking.xml" hash="705fed66e2f75fa20a4225419719568b"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="internalseolinking.xml" hash="159e4cd95eb62e22d2bf28d6d9bd3fe1"/></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="Ikantam_Internalseolinking.csv" hash="8dd78eaaf57ae746321b76a99a77cb7f"/></dir></target></contents>
35
+ <compatible/>
36
+ <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
37
+ </package>