Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

installed header tags issue


urbanegos

Recommended Posts

Posted

hi

forgive me but i just posted this in another section and i think it is the wrong section

I have spent a while installing the header tags seo. It appears as a section in my contributes file. However i cant find the page that allows you to fill in the header tags i must have missed something. What can be wrong?

thanks in advance

Posted

for products and categories its added thru admin.

 

For few other pages You chek for code having switch statement.

 

You need to either place in teh defines that switch uses for different pages or write it there.

 

Satish

Ask/Skype for Free osCommerce value addon/SEO suggestion tips for your site.

 

Check My About US For who am I and what My company does.

Posted
hi

forgive me but i just posted this in another section and i think it is the wrong section

I have spent a while installing the header tags seo. It appears as a section in my contributes file. However i cant find the page that allows you to fill in the header tags i must have missed something. What can be wrong?

thanks in advance

 

Hi

 

Have a read of Install_Admin.TXT in then download?

 

 

 

Header Tags SEO admin install instructions

===================================================================

 

Remember!

1) BACKUP FIRST - NO RESPONIBILITY HELD

 

********* If you have performed the instructions in the *********

********* Install_Catalog.txt file, skip steps 2 and 3. *********

 

2) Run headertags_seo.sql first or use the included headertags_seo_setup.php file

 

3) Make changes in Install_Catalog.txt file

 

4) If you have not installed other contributions into your shop, then

upload all of the files in the catalog_for_new_shop_only_MS2 or

catalog_for_new_shop_only_RC2 directory, depending upon your shops version,

to the same location in your shop. If you have installed other

contributions, then you should only upload the files in the catalog

directory.

 

Please note the following line numbers are for a clean install. They will

vary if your files have been changed.

 

===================================================================

Add the following to admin/includes/function/general.php before the last ?>

 

/*** Begin Header Tags SEO ***/

function tep_get_category_htc_title($category_id, $language_id) {

$category_query = tep_db_query("select categories_htc_title_tag from " . TABLE_CATEGORIES_DESCRIPTION . " where categories_id = '" . (int)$category_id . "' and language_id = '" . (int)$language_id . "'");

$category = tep_db_fetch_array($category_query);

 

return $category['categories_htc_title_tag'];

}

 

function tep_get_category_htc_desc($category_id, $language_id) {

$category_query = tep_db_query("select categories_htc_desc_tag from " . TABLE_CATEGORIES_DESCRIPTION . " where categories_id = '" . (int)$category_id . "' and language_id = '" . (int)$language_id . "'");

$category = tep_db_fetch_array($category_query);

 

return $category['categories_htc_desc_tag'];

}

 

function tep_get_category_htc_keywords($category_id, $language_id) {

$category_query = tep_db_query("select categories_htc_keywords_tag from " . TABLE_CATEGORIES_DESCRIPTION . " where categories_id = '" . (int)$category_id . "' and language_id = '" . (int)$language_id . "'");

$category = tep_db_fetch_array($category_query);

 

return $category['categories_htc_keywords_tag'];

}

 

function tep_get_category_htc_description($category_id, $language_id) {

$category_query = tep_db_query("select categories_htc_description from " . TABLE_CATEGORIES_DESCRIPTION . " where categories_id = '" . (int)$category_id . "' and language_id = '" . (int)$language_id . "'");

$category = tep_db_fetch_array($category_query);

 

return $category['categories_htc_description'];

}

 

function tep_get_products_head_title_tag($product_id, $language_id) {

$product_query = tep_db_query("select products_head_title_tag from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . (int)$product_id . "' and language_id = '" . (int)$language_id . "'");

$product = tep_db_fetch_array($product_query);

 

return $product['products_head_title_tag'];

}

 

function tep_get_products_head_desc_tag($product_id, $language_id) {

$product_query = tep_db_query("select products_head_desc_tag from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . (int)$product_id . "' and language_id = '" . (int)$language_id . "'");

$product = tep_db_fetch_array($product_query);

 

return $product['products_head_desc_tag'];

}

 

function tep_get_products_head_keywords_tag($product_id, $language_id) {

$product_query = tep_db_query("select products_head_keywords_tag from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . (int)$product_id . "' and language_id = '" . (int)$language_id . "'");

$product = tep_db_fetch_array($product_query);

 

return $product['products_head_keywords_tag'];

}

function tep_get_manufacturer_htc_title($manufacturer_id, $language_id) {

$manufacturer_query = tep_db_query("select manufacturers_htc_title_tag from " . TABLE_MANUFACTURERS_INFO . " where manufacturers_id = '" . (int)$manufacturer_id . "' and languages_id = '" . (int)$language_id . "'");

$manufacturer = tep_db_fetch_array($manufacturer_query);

 

return $manufacturer['manufacturers_htc_title_tag'];

}

 

function tep_get_manufacturer_htc_desc($manufacturer_id, $language_id) {

$manufacturer_query = tep_db_query("select manufacturers_htc_desc_tag from " . TABLE_MANUFACTURERS_INFO . " where manufacturers_id = '" . (int)$manufacturer_id . "' and languages_id = '" . (int)$language_id . "'");

$manufacturer = tep_db_fetch_array($manufacturer_query);

 

return $manufacturer['manufacturers_htc_desc_tag'];

}

 

function tep_get_manufacturer_htc_keywords($manufacturer_id, $language_id) {

$manufacturer_query = tep_db_query("select manufacturers_htc_keywords_tag from " . TABLE_MANUFACTURERS_INFO . " where manufacturers_id = '" . (int)$manufacturer_id . "' and languages_id = '" . (int)$language_id . "'");

$manufacturer = tep_db_fetch_array($manufacturer_query);

 

return $manufacturer['manufacturers_htc_keywords_tag'];

}

 

function tep_get_manufacturer_htc_description($manufacturer_id, $language_id) {

$manufacturer_query = tep_db_query("select manufacturers_htc_description from " . TABLE_MANUFACTURERS_INFO . " where manufacturers_id = '" . (int)$manufacturer_id . "' and languages_id = '" . (int)$language_id . "'");

$manufacturer = tep_db_fetch_array($manufacturer_query);

 

return $manufacturer['manufacturers_htc_description'];

}

/*** End Header Tags SEO ***/

 

===================================================================

Add to admin/includes/column_left.php before the closing ?>

 

/*** Begin Header Tags SEO ***/

require(DIR_WS_BOXES . 'header_tags_seo.php');

/*** End Header Tags SEO ***/

 

===================================================================

Add to admin/includes/database_tables.php before the last ?>

 

/*** Begin Header Tags SEO ***/

define('TABLE_HEADERTAGS', 'headertags');

define('TABLE_HEADERTAGS_DEFAULT', 'headertags_default');

/*** End Header Tags SEO ***/

 

===================================================================

Add to admin/includes/filenames.php anywhere before the closing ?>

 

/*** Begin Header Tags SEO ***/

define('FILENAME_HEADER_TAGS_SEO', 'header_tags_seo.php');

define('FILENAME_HEADER_TAGS_FILL_TAGS', 'header_tags_fill_tags.php');

define('FILENAME_HEADER_TAGS_TEST', 'header_tags_test.php');

/*** End Header Tags SEO ***/

 

===================================================================

Add to admin/includes/languages/english.php before the closing ?>. Repeat

for any other language you would like Header Tags to work with.

 

/*** Begin Header Tags SEO ***/

// header_tags_seo text in includes/boxes/header_tags_seo.php

define('BOX_HEADING_HEADER_TAGS_SEO', 'Header Tags SEO');

define('BOX_HEADER_TAGS_ADD_A_PAGE', 'Page Control');

define('BOX_HEADER_TAGS_FILL_TAGS', 'Fill Tags');

define('BOX_HEADER_TAGS_TEST', 'Test');

/*** End Header Tags SEO ***/

 

===================================================================

Add the following in admin/includes/languages/english/categories.php

anywhere before the closing ?>. Repeat for any other language you would

like Header Tags to work with.

 

/*** Begin Header Tags SEO ***/

define('TEXT_PRODUCT_METTA_INFO', '<b>Meta Tag Information</b>');

define('TEXT_PRODUCTS_PAGE_TITLE', 'Product Title Tag:');

define('TEXT_PRODUCTS_HEADER_DESCRIPTION', 'Product Description Tag:');

define('TEXT_PRODUCTS_KEYWORDS', 'Product Keywords Tag:');

/*** End Header Tags SEO ***/

 

===================================================================

Make the following changes to admin/categories.php

 

FIND (about line 61)

 

for ($i=0, $n=sizeof($languages); $i<$n; $i++) {

$categories_name_array = $HTTP_POST_VARS['categories_name'];

 

ADD after it

 

/*** Begin Header Tags SEO ***/

$categories_htc_title_array = $HTTP_POST_VARS['categories_htc_title_tag'];

$categories_htc_desc_array = $HTTP_POST_VARS['categories_htc_desc_tag'];

$categories_htc_keywords_array = $HTTP_POST_VARS['categories_htc_keywords_tag'];

$categories_htc_description_array = $HTTP_POST_VARS['categories_htc_description'];

/*** End Header Tags SEO ***/

 

FIND (a few lines down - around line 72)

 

$sql_data_array = array('categories_name' => tep_db_prepare_input($categories_name_array[$language_id]));

 

REPLACE with

 

/*** Begin Header Tags SEO ***/

$sql_data_array = array('categories_name' => tep_db_prepare_input($categories_name_array[$language_id]),

'categories_htc_title_tag' => (tep_not_null($categories_htc_title_array[$language_id]) ? tep_db_prepare_input($categories_htc_title_array[$language_id]) : tep_db_prepare_input($categories_name_array[$language_id])),

'categories_htc_desc_tag' => (tep_not_null($categories_htc_desc_array[$language_id]) ? tep_db_prepare_input($categories_htc_desc_array[$language_id]) : tep_db_prepare_input($categories_name_array[$language_id])),

'categories_htc_keywords_tag' => (tep_not_null($categories_htc_keywords_array[$language_id]) ? tep_db_prepare_input($categories_htc_keywords_array[$language_id]) : tep_db_prepare_input($categories_name_array[$language_id])),

'categories_htc_description' => tep_db_prepare_input($categories_htc_description_array[$language_id]));

/*** End Header Tags SEO ***/

 

===================================================================

Around line 260, find these lines in admin/categories.php

 

$sql_data_array = array('products_name' => tep_db_prepare_input($HTTP_POST_VARS['products_name'][$language_id]),

'products_description' => tep_db_prepare_input($HTTP_POST_VARS['products_description'][$language_id]),

'products_url' => tep_db_prepare_input($HTTP_POST_VARS['products_url'][$language_id]));

 

REPLACE it with

 

/*** Begin Header Tags SEO ***/

$sql_data_array = array('products_name' => tep_db_prepare_input($HTTP_POST_VARS['products_name'][$language_id]),

'products_description' => tep_db_prepare_input($HTTP_POST_VARS['products_description'][$language_id]),

'products_url' => tep_db_prepare_input($HTTP_POST_VARS['products_url'][$language_id]),

'products_head_title_tag' => ((tep_not_null($HTTP_POST_VARS['products_head_title_tag'][$language_id])) ? tep_db_prepare_input($HTTP_POST_VARS['products_head_title_tag'][$language_id]) : tep_db_prepare_input($HTTP_POST_VARS['products_name'][$language_id])),

'products_head_desc_tag' => ((tep_not_null($HTTP_POST_VARS['products_head_desc_tag'][$language_id])) ? tep_db_prepare_input($HTTP_POST_VARS['products_head_desc_tag'][$language_id]) : tep_db_prepare_input($HTTP_POST_VARS['products_name'][$language_id])),

'products_head_keywords_tag' => ((tep_not_null($HTTP_POST_VARS['products_head_keywords_tag'][$language_id])) ? tep_db_prepare_input($HTTP_POST_VARS['products_head_keywords_tag'][$language_id]) : tep_db_prepare_input($HTTP_POST_VARS['products_name'][$language_id])));

/*** End Header Tags SEO ***/

 

===================================================================

Around line 311, find these lines in admin/categories.php

 

$description_query = tep_db_query("select language_id, products_name, products_description, products_url from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . (int)$products_id . "'");

while ($description = tep_db_fetch_array($description_query)) {

tep_db_query("insert into " . TABLE_PRODUCTS_DESCRIPTION . " (products_id, language_id, products_name, products_description, products_url, products_viewed) values ('" . (int)$dup_products_id . "', '" . (int)$description['language_id'] . "', '" . tep_db_input($description['products_name']) . "', '" . tep_db_input($description['products_description']) . "', '" . tep_db_input($description['products_url']) . "', '0')");

}

 

Replace with the following

 

/*** Begin Header Tags SEO ***/

$description_query = tep_db_query("select language_id, products_name, products_description, products_head_title_tag, products_head_desc_tag, products_head_keywords_tag, products_url from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . (int)$products_id . "'");

while ($description = tep_db_fetch_array($description_query)) {

tep_db_query("insert into " . TABLE_PRODUCTS_DESCRIPTION . " (products_id, language_id, products_name, products_description, products_head_title_tag, products_head_desc_tag, products_head_keywords_tag, products_url, products_viewed) values ('" . (int)$dup_products_id . "', '" . (int)$description['language_id'] . "', '" . tep_db_input($description['products_name']) . "', '" . tep_db_input($description['products_description']) . "', '" . tep_db_input($description['products_head_title_tag']) . "', '" . tep_db_input($description['products_head_desc_tag']) . "', '" . tep_db_input($description['products_head_keywords_tag']) . "', '" . tep_db_input($description['products_url']) . "', '0')");

}

/*** End Header Tags SEO ***/

 

===================================================================

Around line 394, find this lines in admin/categories.php

 

if (isset($HTTP_GET_VARS['pID']) && empty($HTTP_POST_VARS)) {

$product_query = tep_db_query("select pd.products_name, pd.products_description, pd.products_url, p.products_id, p.products_quantity, p.products_model, p.products_image, p.products_price, p.products_weight, p.products_date_added, p.products_last_modified, date_format(p.products_date_available, '%Y-%m-%d') as products_date_available, p.products_status, p.products_tax_class_id, p.manufacturers_id from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = '" . (int)$HTTP_GET_VARS['pID'] . "' and p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "'");

$product = tep_db_fetch_array($product_query);

 

Replace with the following

 

/*** Begin Header Tags SEO ***/

if (isset ($HTTP_GET_VARS['pID']) && (!$HTTP_POST_VARS) ) {

$product_query = tep_db_query("select pd.products_name, pd.products_description, pd.products_head_title_tag, pd.products_head_desc_tag, pd.products_head_keywords_tag, pd.products_url, p.products_id, p.products_quantity, p.products_model, p.products_image, p.products_price, p.products_weight, p.products_date_added, p.products_last_modified, date_format(p.products_date_available, '%Y-%m-%d') as products_date_available, p.products_status, p.products_tax_class_id, p.manufacturers_id from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = '" . (int)$HTTP_GET_VARS['pID'] . "' and p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "'");

$product = tep_db_fetch_array($product_query);

/*** End Header Tags SEO ***/

 

===================================================================

Around line 519, find this section of code in admin/categories.php

 

NOTE: There can be several instances of the code:

for ($i=0, $n=sizeof($languages); $i<$n; $i++)

so you need to be sure you have the correct one. The best way is to do a

search for TEXT_PRODUCTS_DESCRIPTION, which is part of the code to be replaced.

 

<?php

for ($i=0, $n=sizeof($languages); $i<$n; $i++) {

?>

<tr>

<td class="main" valign="top"><?php if ($i == 0) echo TEXT_PRODUCTS_DESCRIPTION; ?></td>

<td><table border="0" cellspacing="0" cellpadding="0">

<tr>

<td class="main" valign="top"><?php echo tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']); ?> </td>

<td class="main"><?php echo tep_draw_textarea_field('products_description[' . $languages[$i]['id'] . ']', 'soft', '70', '15', (($products_description[$languages[$i]['id']]) ? stripslashes($products_description[$languages[$i]['id']]) : tep_get_products_description($pInfo->products_id, $languages[$i]['id']))); ?></td>

</tr>

</table></td>

</tr>

<?php

}

?>

<tr>

<td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>

</tr>

 

Replace with the following

 

<!-- /*** Begin Header Tags SEO ***/ //-->

<?php

for ($i=0, $n=sizeof($languages); $i<$n; $i++) {

?>

<tr>

<td class="main" valign="top"><?php if ($i == 0) echo TEXT_PRODUCTS_DESCRIPTION; ?></td>

<td><table border="0" cellspacing="0" cellpadding="0">

<tr>

<td class="main" valign="top"><?php echo tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']); ?> </td>

<td class="main"><?php echo tep_draw_textarea_field('products_description[' . $languages[$i]['id'] . ']', 'soft', '70', '15', (isset($products_description[$languages[$i]['id']]) ? stripslashes($products_description[$languages[$i]['id']]) : tep_get_products_description($pInfo->products_id, $languages[$i]['id']))); ?></td>

</tr>

</table></td>

</tr>

<?php

}

?>

<tr>

<td colspan="2" class="main"><hr><?php echo TEXT_PRODUCT_METTA_INFO; ?></td>

</tr>

<tr>

<td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>

</tr>

<?php

for ($i=0, $n=sizeof($languages); $i<$n; $i++) {

?>

<tr>

<td class="main" valign="top"><?php if ($i == 0) echo TEXT_PRODUCTS_PAGE_TITLE; ?></td>

<td><table border="0" cellspacing="0" cellpadding="0">

<tr>

<td class="main" valign="top"><?php echo tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']); ?> </td>

<td class="main"><?php echo tep_draw_textarea_field('products_head_title_tag[' . $languages[$i]['id'] . ']', 'soft', '70', '5', (isset($products_head_title_tag[$languages[$i]['id']]) ? stripslashes($products_head_title_tag[$languages[$i]['id']]) : tep_get_products_head_title_tag($pInfo->products_id, $languages[$i]['id']))); ?></td>

</tr>

</table></td>

</tr>

<?php

}

for ($i=0, $n=sizeof($languages); $i<$n; $i++) {

?>

<tr>

<td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>

</tr>

<tr>

<td class="main" valign="top"><?php if ($i == 0) echo TEXT_PRODUCTS_HEADER_DESCRIPTION; ?></td>

<td><table border="0" cellspacing="0" cellpadding="0">

<tr>

<td class="main" valign="top"><?php echo tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']); ?> </td>

<td class="main"><?php echo tep_draw_textarea_field('products_head_desc_tag[' . $languages[$i]['id'] . ']', 'soft', '70', '5', (isset($products_head_desc_tag[$languages[$i]['id']]) ? stripslashes($products_head_desc_tag[$languages[$i]['id']]) : tep_get_products_head_desc_tag($pInfo->products_id, $languages[$i]['id']))); ?></td>

</tr>

</table></td>

</tr>

<?php

}

for ($i=0, $n=sizeof($languages); $i<$n; $i++) {

?>

<tr>

<td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>

</tr>

<tr>

<td class="main" valign="top"><?php if ($i == 0) echo TEXT_PRODUCTS_KEYWORDS; ?></td>

<td><table border="0" cellspacing="0" cellpadding="0">

<tr>

<td class="main" valign="top"><?php echo tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']); ?> </td>

<td class="main"><?php echo tep_draw_textarea_field('products_head_keywords_tag[' . $languages[$i]['id'] . ']', 'soft', '70', '5', (isset($products_head_keywords_tag[$languages[$i]['id']]) ? stripslashes($products_head_keywords_tag[$languages[$i]['id']]) : tep_get_products_head_keywords_tag($pInfo->products_id, $languages[$i]['id']))); ?></td>

</tr>

</table></td>

</tr>

<?php

}

?>

<tr>

<td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>

</tr>

<tr>

<td colspan="2" class="main"><hr></td>

</tr>

<!-- /*** End Header Tags SEO ***/ //-->

 

===================================================================

Around line 679, find this section of code in admin/categories.php

 

<?php

} elseif ($action == 'new_product_preview') {

if (tep_not_null($HTTP_POST_VARS)) {

$pInfo = new objectInfo($HTTP_POST_VARS);

$products_name = $HTTP_POST_VARS['products_name'];

$products_description = $HTTP_POST_VARS['products_description'];

$products_url = $HTTP_POST_VARS['products_url'];

} else {

$product_query = tep_db_query("select p.products_id, pd.language_id, pd.products_name, pd.products_description, pd.products_url, p.products_quantity, p.products_model, p.products_image, p.products_price, p.products_weight, p.products_date_added, p.products_last_modified, p.products_date_available, p.products_status, p.manufacturers_id from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = pd.products_id and p.products_id = '" . (int)$HTTP_GET_VARS['pID'] . "'");

$product = tep_db_fetch_array($product_query);

 

Replace with the following

 

<!-- /*** Begin Header Tags SEO ***/ //-->

<?php

} elseif ($action == 'new_product_preview') {

if (tep_not_null($HTTP_POST_VARS)) {

$pInfo = new objectInfo($HTTP_POST_VARS);

$products_name = $HTTP_POST_VARS['products_name'];

$products_description = $HTTP_POST_VARS['products_description'];

$products_head_title_tag = $HTTP_POST_VARS['products_head_title_tag'];

$products_head_desc_tag = $HTTP_POST_VARS['products_head_desc_tag'];

$products_head_keywords_tag = $HTTP_POST_VARS['products_head_keywords_tag'];

$products_url = $HTTP_POST_VARS['products_url'];

} else {

$product_query = tep_db_query("select p.products_id, pd.language_id, pd.products_name, pd.products_description, pd.products_head_title_tag, pd.products_head_desc_tag, pd.products_head_keywords_tag, pd.products_url, p.products_quantity, p.products_model, p.products_image, p.products_price, p.products_weight, p.products_date_added, p.products_last_modified, p.products_date_available, p.products_status, p.manufacturers_id from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = pd.products_id and p.products_id = '" . (int)$HTTP_GET_VARS['pID'] . "'");

$product = tep_db_fetch_array($product_query);

/*** End Header Tags SEO ***/

 

===================================================================

Around line 702, find this section of code in admin/categories.php

 

$languages = tep_get_languages();

for ($i=0, $n=sizeof($languages); $i<$n; $i++) {

if (isset($HTTP_GET_VARS['read']) && ($HTTP_GET_VARS['read'] == 'only')) {

$pInfo->products_name = tep_get_products_name($pInfo->products_id, $languages[$i]['id']);

$pInfo->products_description = tep_get_products_description($pInfo->products_id, $languages[$i]['id']);

$pInfo->products_url = tep_get_products_url($pInfo->products_id, $languages[$i]['id']);

} else {

$pInfo->products_name = tep_db_prepare_input($products_name[$languages[$i]['id']]);

$pInfo->products_description = tep_db_prepare_input($products_description[$languages[$i]['id']]);

$pInfo->products_url = tep_db_prepare_input($products_url[$languages[$i]['id']]);

}

 

Replace with the following

 

/*** Begin Header Tags SEO ***/

$languages = tep_get_languages();

for ($i=0, $n=sizeof($languages); $i<$n; $i++) {

if (isset($HTTP_GET_VARS['read']) && ($HTTP_GET_VARS['read'] == 'only')) {

$pInfo->products_name = tep_get_products_name($pInfo->products_id, $languages[$i]['id']);

$pInfo->products_description = tep_get_products_description($pInfo->products_id, $languages[$i]['id']);

$pInfo->products_head_title_tag = tep_db_prepare_input($products_head_title_tag[$languages[$i]['id']]);

$pInfo->products_head_desc_tag = tep_db_prepare_input($products_head_desc_tag[$languages[$i]['id']]);

$pInfo->products_head_keywords_tag = tep_db_prepare_input($products_head_keywords_tag[$languages[$i]['id']]);

$pInfo->products_url = tep_get_products_url($pInfo->products_id, $languages[$i]['id']);

} else {

$pInfo->products_name = tep_db_prepare_input($products_name[$languages[$i]['id']]);

$pInfo->products_description = tep_db_prepare_input($products_description[$languages[$i]['id']]);

$pInfo->products_head_title_tag = tep_db_prepare_input($products_head_title_tag[$languages[$i]['id']]);

$pInfo->products_head_desc_tag = tep_db_prepare_input($products_head_desc_tag[$languages[$i]['id']]);

$pInfo->products_head_keywords_tag = tep_db_prepare_input($products_head_keywords_tag[$languages[$i]['id']]);

$pInfo->products_url = tep_db_prepare_input($products_url[$languages[$i]['id']]);

}

/*** End Header Tags SEO ***/

 

===================================================================

Around line 805, find this section of code in admin/categories.php

 

$languages = tep_get_languages();

for ($i=0, $n=sizeof($languages); $i<$n; $i++) {

echo tep_draw_hidden_field('products_name[' . $languages[$i]['id'] . ']', htmlspecialchars(stripslashes($products_name[$languages[$i]['id']])));

echo tep_draw_hidden_field('products_description[' . $languages[$i]['id'] . ']', htmlspecialchars(stripslashes($products_description[$languages[$i]['id']])));

echo tep_draw_hidden_field('products_url[' . $languages[$i]['id'] . ']', htmlspecialchars(stripslashes($products_url[$languages[$i]['id']])));

}

 

Replace with the following

 

/*** Begin Header Tags SEO ***/

$languages = tep_get_languages();

for ($i=0, $n=sizeof($languages); $i<$n; $i++) {

echo tep_draw_hidden_field('products_name[' . $languages[$i]['id'] . ']', htmlspecialchars(stripslashes($products_name[$languages[$i]['id']])));

echo tep_draw_hidden_field('products_description[' . $languages[$i]['id'] . ']', htmlspecialchars(stripslashes($products_description[$languages[$i]['id']])));

echo tep_draw_hidden_field('products_head_title_tag[' . $languages[$i]['id'] . ']', htmlspecialchars(stripslashes($products_head_title_tag[$languages[$i]['id']])));

echo tep_draw_hidden_field('products_head_desc_tag[' . $languages[$i]['id'] . ']', htmlspecialchars(stripslashes($products_head_desc_tag[$languages[$i]['id']])));

echo tep_draw_hidden_field('products_head_keywords_tag[' . $languages[$i]['id'] . ']', htmlspecialchars(stripslashes($products_head_keywords_tag[$languages[$i]['id']])));

echo tep_draw_hidden_field('products_url[' . $languages[$i]['id'] . ']', htmlspecialchars(stripslashes($products_url[$languages[$i]['id']])));

}

/*** End Header Tags SEO ***/

 

===================================================================

Around line 877, find this code in admin/categories.php

 

$categories_query = tep_db_query("select c.categories_id, cd.categories_name, c.categories_image, c.parent_id, c.sort_order, c.date_added, c.last_modified from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.categories_id = cd.categories_id and cd.language_id = '" . (int)$languages_id . "' and cd.categories_name like '%" . tep_db_input($search) . "%' order by c.sort_order, cd.categories_name");

} else {

$categories_query = tep_db_query("select c.categories_id, cd.categories_name, c.categories_image, c.parent_id, c.sort_order, c.date_added, c.last_modified from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.parent_id = '" . (int)$current_category_id . "' and c.categories_id = cd.categories_id and cd.language_id = '" . (int)$languages_id . "' order by c.sort_order, cd.categories_name");

 

and replace it with

 

/*** Begin Header Tags SEO ***/

$categories_query = tep_db_query("select c.categories_id, cd.categories_name, c.categories_image, c.parent_id, c.sort_order, c.date_added, c.last_modified, cd.categories_htc_title_tag, cd.categories_htc_desc_tag, cd.categories_htc_keywords_tag, cd.categories_htc_description from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.categories_id = cd.categories_id and cd.language_id = '" . (int)$languages_id . "' and cd.categories_name like '%" . tep_db_input($search) . "%' order by c.sort_order, cd.categories_name");

} else {

$categories_query = tep_db_query("select c.categories_id, cd.categories_name, c.categories_image, c.parent_id, c.sort_order, c.date_added, c.last_modified, cd.categories_htc_title_tag, cd.categories_htc_desc_tag, cd.categories_htc_keywords_tag, cd.categories_htc_description from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.parent_id = '" . (int)$current_category_id . "' and c.categories_id = cd.categories_id and cd.language_id = '" . (int)$languages_id . "' order by c.sort_order, cd.categories_name");

/*** End Header Tags SEO ***/

 

===================================================================

Around line 984, find this code in admin/categories.php

 

$category_inputs_string = '';

$languages = tep_get_languages();

for ($i = 0, $n = sizeof($languages); $i < $n; $i++) {

$category_inputs_string .= '<br>' . tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . ' ' . tep_draw_input_field('categories_name[' . $languages[$i]['id'] . ']');

 

ADD under it

 

/*** Begin Header Tags SEO ***/

$category_htc_title_string .= '<br>' . tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . ' ' . tep_draw_input_field('categories_htc_title_tag[' . $languages[$i]['id'] . ']');

$category_htc_desc_string .= '<br>' . tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . ' ' . tep_draw_input_field('categories_htc_desc_tag[' . $languages[$i]['id'] . ']');

$category_htc_keywords_string .= '<br>' . tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . ' ' . tep_draw_input_field('categories_htc_keywords_tag[' . $languages[$i]['id'] . ']');

$category_htc_description_string .= '<br>' . tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . ' ' . tep_draw_textarea_field('categories_htc_description[' . $languages[$i]['id'] . ']', 'hard', 30, 5, '');

/*** End Header Tags SEO ***/

 

===================================================================

FIND around line 988 in admin/categories.php

$contents[] = array('text' => '<br>' . TEXT_SORT_ORDER . '<br>' . tep_draw_input_field('sort_order', '', 'size="2"'));

 

ADD under it

 

/*** Begin Header Tags SEO ***/

$contents[] = array('text' => '<br>' . 'Header Tags Category Title' . $category_htc_title_string);

$contents[] = array('text' => '<br>' . 'Header Tags Category Description' . $category_htc_desc_string);

$contents[] = array('text' => '<br>' . 'Header Tags Category Keywords' . $category_htc_keywords_string);

$contents[] = array('text' => '<br>' . 'Header Tags Categories Description' . $category_htc_description_string);

/*** End Header Tags SEO ***/

 

===================================================================

FIND (about line 1013) in admin/categories.php

 

$category_inputs_string = '';

$languages = tep_get_languages();

for ($i = 0, $n = sizeof($languages); $i < $n; $i++) {

$category_inputs_string .= '<br>' . tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . ' ' . tep_draw_input_field('categories_name[' . $languages[$i]['id'] . ']', tep_get_category_name($cInfo->categories_id, $languages[$i]['id']));

 

ADD under it

 

/*** Begin Header Tags SEO ***/

$category_htc_title_string .= '<br>' . tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . ' ' . tep_draw_input_field('categories_htc_title_tag[' . $languages[$i]['id'] . ']', tep_get_category_htc_title($cInfo->categories_id, $languages[$i]['id']));

$category_htc_desc_string .= '<br>' . tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . ' ' . tep_draw_input_field('categories_htc_desc_tag[' . $languages[$i]['id'] . ']', tep_get_category_htc_desc($cInfo->categories_id, $languages[$i]['id']));

$category_htc_keywords_string .= '<br>' . tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . ' ' . tep_draw_input_field('categories_htc_keywords_tag[' . $languages[$i]['id'] . ']', tep_get_category_htc_keywords($cInfo->categories_id, $languages[$i]['id']));

$category_htc_description_string .= '<br>' . tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . ' ' . tep_draw_textarea_field('categories_htc_description[' . $languages[$i]['id'] . ']', 'hard', 30, 5, tep_get_category_htc_description($cInfo->categories_id, $languages[$i]['id']));

/*** End Header Tags SEO ***/

 

===================================================================

FIND (about line 1022) in admin/categories.php

$contents[] = array('text' => '<br>' . TEXT_EDIT_SORT_ORDER . '<br>' . tep_draw_input_field('sort_order', $cInfo->sort_order, 'size="2"'));

 

ADD under it

 

/*** Begin Header Tags SEO ***/

$contents[] = array('text' => '<br>' . 'Header Tags Category Title' . $category_htc_title_string);

$contents[] = array('text' => '<br>' . 'Header Tags Category Description' . $category_htc_desc_string);

$contents[] = array('text' => '<br>' . 'Header Tags Category Keywords' . $category_htc_keywords_string);

$contents[] = array('text' => '<br>' . 'Header Tags Categories Description' . $category_htc_description_string);

/*** End Header Tags SEO ***/

 

===================================================================

Make the following changes to admin/manufacturers.php

 

FIND (about line 46)

 

for ($i=0, $n=sizeof($languages); $i<$n; $i++) {

$manufacturers_url_array = $HTTP_POST_VARS['manufacturers_url'];

 

ADD under it

 

/*** Begin Header Tags SEO ***/

$manufacturers_htc_title_array = $HTTP_POST_VARS['manufacturers_htc_title_tag'];

$manufacturers_htc_desc_array = $HTTP_POST_VARS['manufacturers_htc_desc_tag'];

$manufacturers_htc_keywords_array = $HTTP_POST_VARS['manufacturers_htc_keywords_tag'];

$manufacturers_htc_description_array = $HTTP_POST_VARS['manufacturers_htc_description'];

/*** End Header Tags SEO ***/

 

===================================================================

FIND (around line 56) in admin/manufacturers.php

 

$sql_data_array = array('manufacturers_url' => tep_db_prepare_input($manufacturers_url_array[$language_id]));

 

REPLACE with

 

/*** Begin Header Tags SEO ***/

$sql_data_array = array('manufacturers_url' => tep_db_prepare_input($manufacturers_url_array[$language_id]),

'manufacturers_htc_title_tag' => (tep_not_null($manufacturers_htc_title_array[$language_id]) ? tep_db_prepare_input($manufacturers_htc_title_array[$language_id]) : $manufacturers_name),

'manufacturers_htc_desc_tag' => (tep_not_null($manufacturers_htc_desc_array[$language_id]) ? tep_db_prepare_input($manufacturers_htc_desc_array[$language_id]) : $manufacturers_name),

'manufacturers_htc_keywords_tag' => (tep_not_null($manufacturers_htc_keywords_array[$language_id]) ? tep_db_prepare_input($manufacturers_htc_keywords_array[$language_id]) : $manufacturers_name),

'manufacturers_htc_description' => tep_db_prepare_input($manufacturers_htc_description_array[$language_id]));

/*** End Header Tags SEO ***/

 

===================================================================

FIND (around line 156) in admin/manufacturers.php

 

$manufacturers_query_raw = "select manufacturers_id, manufacturers_name, manufacturers_image, date_added, last_modified from " . TABLE_MANUFACTURERS . " order by manufacturers_name";

 

REPLACE with

 

/*** Begin Header Tags SEO ***/

$manufacturers_query_raw = "select m.manufacturers_id, m.manufacturers_name, m.manufacturers_image, m.date_added, m.last_modified, mi.manufacturers_htc_title_tag from " . TABLE_MANUFACTURERS . " m LEFT JOIN " . TABLE_MANUFACTURERS_INFO . " mi on m.manufacturers_id = mi.manufacturers_id where mi.languages_id = '".$languages_id ."' order by m.manufacturers_name";

/*** End Header Tags SEO ***/

 

===================================================================

FIND (around line 214) in admin/manufacturers.php

 

for ($i=0, $n=sizeof($languages); $i<$n; $i++) {

$manufacturer_inputs_string .= '<br>' . tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . ' ' . tep_draw_input_field('manufacturers_url[' . $languages[$i]['id'] . ']');

 

ADD under it

 

/*** Begin Header Tags SEO ***/

$manufacturer_htc_title_string .= '<br>' . tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . ' ' . tep_draw_input_field('manufacturers_htc_title_tag[' . $languages[$i]['id'] . ']');

$manufacturer_htc_desc_string .= '<br>' . tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . ' ' . tep_draw_input_field('manufacturers_htc_desc_tag[' . $languages[$i]['id'] . ']');

$manufacturer_htc_keywords_string .= '<br>' . tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . ' ' . tep_draw_input_field('manufacturers_htc_keywords_tag[' . $languages[$i]['id'] . ']');

$manufacturer_htc_description_string .= '<br>' . tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . ' ' . tep_draw_textarea_field('manufacturers_htc_description[' . $languages[$i]['id'] . ']', 'hard', 30, 5, '');

/*** End Header Tags SEO ***/

 

===================================================================

FIND (around line 224) in admin/manufacturers.php

 

$contents[] = array('text' => '<br>' . TEXT_MANUFACTURERS_URL . $manufacturer_inputs_string);

 

ADD under it

 

/*** Begin Header Tags SEO ***/

$contents[] = array('text' => '<br>' . 'Header Tags Manufacturer Title' . $manufacturer_htc_title_string);

$contents[] = array('text' => '<br>' . 'Header Tags Manufacturer Description' . $manufacturer_htc_desc_string);

$contents[] = array('text' => '<br>' . 'Header Tags Manufacturer Keywords' . $manufacturer_htc_keywords_string);

$contents[] = array('text' => '<br>' . 'Header Tags Manufacturer Description' . $manufacturer_htc_description_string);

/*** End Header Tags SEO ***/

 

===================================================================

FIND (around line 243) in admin/manufacturers.php

 

for ($i=0, $n=sizeof($languages); $i<$n; $i++) {

$manufacturer_inputs_string .= '<br>' . tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . ' ' . tep_draw_input_field('manufacturers_url[' . $languages[$i]['id'] . ']', tep_get_manufacturer_url($mInfo->manufacturers_id, $languages[$i]['id']));

 

ADD under it

 

/*** Begin Header Tags SEO ***/

$manufacturer_htc_title_string .= '<br>' . tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . ' ' . tep_draw_input_field('manufacturers_htc_title_tag[' . $languages[$i]['id'] . ']', tep_get_manufacturer_htc_title($mInfo->manufacturers_id, $languages[$i]['id']));

$manufacturer_htc_desc_string .= '<br>' . tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . ' ' . tep_draw_input_field('manufacturers_htc_desc_tag[' . $languages[$i]['id'] . ']', tep_get_manufacturer_htc_desc($mInfo->manufacturers_id, $languages[$i]['id']));

$manufacturer_htc_keywords_string .= '<br>' . tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . ' ' . tep_draw_input_field('manufacturers_htc_keywords_tag[' . $languages[$i]['id'] . ']', tep_get_manufacturer_htc_keywords($mInfo->manufacturers_id, $languages[$i]['id']));

$manufacturer_htc_description_string .= '<br>' . tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . ' ' . tep_draw_textarea_field('manufacturers_htc_description[' . $languages[$i]['id'] . ']', 'hard', 30, 5, tep_get_manufacturer_htc_description($mInfo->manufacturers_id, $languages[$i]['id']));

/*** End Header Tags SEO ***/

 

===================================================================

FIND (around line 253) in admin/manufacturers.php

 

$contents[] = array('text' => '<br>' . TEXT_MANUFACTURERS_URL . $manufacturer_inputs_string);

 

ADD under it

 

/*** Begin Header Tags SEO ***/

$contents[] = array('text' => '<br>' . 'Header Tags Manufacturer Title' . $manufacturer_htc_title_string);

$contents[] = array('text' => '<br>' . 'Header Tags Manufacturer Description' . $manufacturer_htc_desc_string);

$contents[] = array('text' => '<br>' . 'Header Tags Manufacturer Keywords' . $manufacturer_htc_keywords_string);

$contents[] = array('text' => '<br>' . 'Header Tags Manufacturer Description' . $manufacturer_htc_description_string);

/*** End Header Tags SEO ***/

 

===================================================================

OPTIONAL:

 

If you would like to use the TinyMCE editor with the description fields of

Header Tags, install the TinyMCE Anywhere contribution from

http://addons.oscommerce.com/info/4852. The instructions will explain to add the

following code to the file:

 

if ($action == 'new_product') { // No need to put JS on all pages.

$languages = tep_get_languages(); // Get all languages

// Build list of textareas to convert

for ($i = 0, $n = sizeof($languages); $i < $n; $i++) {

$str.="products_description[".$languages[$i]['id']."],";

} //end for each language

$mce_str = rtrim ($str,","); // Removed the last comma from the string.

// You can add more textareas to convert in the $str, be careful that they are all separated by a comma.

echo '<script language="javascript" type="text/javascript" src="includes/javascript/tiny_mce/tiny_mce.js"></script>';

include "includes/javascript/tiny_mce/general.php";

} // END tinyMCE Anywhere ?>

 

Change the line

if ($action == 'new_product') { // No need to put JS on all pages.

to

if ($action == 'new_product' || $action == 'new_category' || $action == 'edit_category') { // No need to put JS on all pages.

 

Change the line

$str.="products_description[".$languages[$i]['id']."],";

to

$str.="products_description[".$languages[$i]['id']."], products_head_desc_tag[".$languages[$i]['id']."], categories_htc_description[".$languages[$i]['id']."],";

 

===================================================================

That's all ;-)

 

===================================================================

 

TROUBLESHOOTING:

 

1 - The tools in the admin section have to be able to write to the

include/header_tags.php file. In order to do that, the permissions

for that file must be set correctly. If Header Tags thinks the permissions

are not set correctly, it will display a warning message with what it thinks

are the proper permissions. You will need to change those permissions using

an ftp program (right click and choose chmod) or by using your hosts control

panel. The permissions should, typically, be set to 755 (777 for some

servers). If you do not know what this is or how to do it, ask your host to

help you.

 

2 - Some hosts restrict a function used in

catalog/admin/includes/functions/header_tags.php. If you get an error regarding

the chmod() php function in this file, like:

 

Warning: chmod(): Operation not permitted in ...

Cannot change the mode of file (../includes/header_tags.php)

 

and you have addressed the file permissions settings as stated above, you may

have to comment out the function. To do that,

OPEN: admin/includes/functions/header_tags.php

 

Around line 201 you find this code:

 

if (!is_writable($filename))

{

if (!chmod($filename, 0666)) {

echo "Cannot change the mode of file ($filename)";

exit;

}

}

 

Replace that with the following code:

 

if (!is_writable($filename))

{

echo "The file isn't writable";

exit;

/* if (!chmod($filename, 0666)) {

echo "Cannot change the mode of file ($filename)";

exit;

} */

}

 

************************** PLEASE NOTE THIS ONE **************************

3 - In general, the vast majority of problems with the installation of Header Tags

is due to mistakes in the admin/categories.php file. This is not surprising due

to the large number of changes in that file. If, after installing Header Tags,

you get any error related to the categories file or some function of that file

no longer works, it is due to an error in the changes made to that file. You can

tell if the error is related to that file by looking at the url in admin. If it

has categories.php in it, then that is the problem. To fix it, download the

free WinMerge program and use it to compare your categories file with the one

included in this archive. Be sure to use the categories.php file from the

directory that matches your shop (MS2 or RC2).

 

4) If you are still having problems, go to admin->Header Tags SEO->Test and click

on the button on that page. That will display any failures found in the

installation. No errors should be found, except, possibly, the permissions error

(see above regarding permissions). If you get a failure and cannot figure it out,

post that error in the support thread for the contribution. Questions about failures

without posting the results of the test will be answered by telling you to run

the test, so please do that first.

 

The support thread for Header Tags SEO is at

http://www.oscommerce.com/forums/index.php?showtopic=298099

Posted

hi

thanks for that

I have undertaken everything in the read me install text. My files are also set to 777.

it shows in configuration i have header tags but the document doesnt open at all

when i click header tags seo this is what i get

Value Action

Automatically Add New Pages true

Check for Missing Tags true

Display Column Box false

Disable Permission Warning false

Display Help Popups true

Display Social Bookmark true

Keyword Density Range 0.02,0.06

Separator - Description -

Separator - Keywords ,

Automatically Add New Pages

 

 

Adds any new pages when Page Control is accessed

(true=on false=off)

 

Date Added: 09/10/2008

 

is this right?

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...