Jump to content
Jack_mcs

Header Tags SEO

Recommended Posts

@@Jack_mcs

 

Hi Jack,

 

The array is empty and I didn't run the fills tags. 

Will this array make the Bold name on the top of the product in product_info.php not display???

My problem is the top bold name of the product is missing. it shows <a name=\"\$header_tags_array['title']\"></a> in the html source of IE.

 

I don't know why!!

Do you have any idea?

 

Thanks.

 

chuntse

Share this post


Link to post
Share on other sites

Yes, the name on the product page is taken from the array so that it can be controlled via admin. If you don't run fill tags, all titles and tags are empty, making the addon mostly useless until a change is made.

Share this post


Link to post
Share on other sites

 

2 - Code like that usually means you are missing a php delimeter. Try placing the following above the <body> command, which should be in the includes/template_top.php file:  ?>

The result is: inkl. 19% MwSt. zzgl. Versand" /> ?>

 

<body>inkl. 19%  MwSt. zzgl. <a href="https://www.xyz.de/popup_shipping.php"target="_blank" onclick="$('#popupShipping').dialog('open'); return false;"><u>Versand</u></a>" />

<meta property="og:currency" content="EUR">

<meta property="og:availability" content="instock">

 <!-- EOF: Header Tags SEO Generated Meta Tags by oscommerce-solution.com -->

 

I've no idea at all where to investigate to track this down.

 

How can I provide more information for you to get rid of this?

Share this post


Link to post
Share on other sites

@@stefan21 In the package of this addon, find the directory for your version of oscommerce and then look in the catalog section of it. There are completed files there. They may not exactly match your version but you should be able to compare them to find your mistake. Using a program like WinMerge (which is free) can make that a much easier process.

Share this post


Link to post
Share on other sites

Well, running the shop in Germany let's you no other choice to alter a few things to match the German law. Unfortunately it's not only a few things, it's a bunch of files that have been altered.

 

I'd like to try another approach, it's too heavy to walk through all the files.

 

Here's the html-output of the product_info:

 

<!DOCTYPE html>
<html dir="ltr" lang="de"<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>xyz® für den </title>
 <meta name="Description" content="xyz® für den " />
 <meta name="Keywords" content="xyz® für den " />
 <meta name="robots" content="noodp" />
 <meta name="slurp" content="noydir" />
 <link rel="canonical" href="https://www.xyz.de/xyz-fuer-p-29.html"/>
<meta property="og:site_name" content="xyz®" />
<meta property="og:locale" content="de" />
<meta property="og:type" content="product" />
<meta property="og:title" content="xyz® für den " />
<meta property="og:description" content="Vorkonfigurierter xyz® ..." />
<meta property="og:image" content="https://www.xyz.de/images/tinbox_open.jpg"/>
<meta property="og:url" content="https://www.xyz.de/xyz-fuer-p-29.html"/>
<meta property="og:price" content="49,90€<br /><span class="price-info"> inkl. 19%  MwSt. zzgl. <a href="https://www.xyz.de/popup_shipping.php"target="_blank" onclick="$('#popupShipping').dialog('open'); return false;"><u>Versand</u></a></span>" />
<meta property="og:currency" content="EUR" />
<meta property="og:availability" content="instock" />
 <!-- EOF: Header Tags SEO Generated Meta Tags by oscommerce-solution.com -->

 

As I can clearly see, one should take a closer look at the <meta property="og:price" ...> How is this tag being filled?

 

In the german.php is defined:

 

define('TEXT_TAX_INFO', ' inkl. %s  MwSt. zzgl. <a href="' . tep_href_link(FILENAME_POPUP_SHIPPING) . '" target="_blank" onclick="$(\'#popupShipping\').dialog(\'open\'); return false;"><u>Versand</u></a>');

 

IMHO it must be something depending on this two things: the meta property price, and maybe the TEXT_TAX_INFO.
 

Is it worth to investigate in this direction, or do you still say it's better to compare?

 

I take a break now, must have some food..

Edited by stefan21

Share this post


Link to post
Share on other sites

I don't know what problem you are having but, in case you didn't notice, the default installation is only for English. You have to be sure to make whatever changes and upload any new files to the German language files.

Share this post


Link to post
Share on other sites

@@Jack_mcs The problem is at the very upper left corner, as I already described. Yes, I know that the default is in English, and yes, I uploaded all files in German directory and made also the changes in the German files.

 

Well, I found out, that commenting out

 

// $ogArray['price'] = $og_price;

 

in the header_tags_opengraph.php may be a kind of workaround. As I'm not a SEO-specialist I cannot tell how important it could be to have a meta property "price"...

 

The real reason could be an altered code in the template_bottom.php.

 

<?php
/*
  $Id$

  osCommerce, Open Source E-Commerce Solutions
  http://www.oscommerce.com

  Copyright © 2010 osCommerce

  Released under the GNU General Public License
*/
?>

</div> <!-- bodyContent //-->

<?php
  if ($oscTemplate->hasBlocks('boxes_column_left')) {
?>

<div id="columnLeft" class="grid_<?php echo $oscTemplate->getGridLeftColumnWidth(); ?> pull_<?php echo $oscTemplate->getGridContentWidth(); ?>">
  <?php echo $oscTemplate->getBlocks('boxes_column_left'); ?>
</div>

<?php
  }

  if ($oscTemplate->hasBlocks('boxes_column_right')) {
?>

<div id="columnRight" class="grid_<?php echo $oscTemplate->getGridRightColumnWidth(); ?>">
  <?php echo $oscTemplate->getBlocks('boxes_column_right'); ?>
</div>

<?php
  }
// osc-support-edition BOF  
?>   
<div id="popupShipping" title="<?php echo HEADING_POPUP_SHIPPING; ?>">
<?php
  require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_SHIPPING);
?>
<?php
// ExtraInfoPages
#################
$page_query = tep_db_query("select p.pages_id, p.sort_order, p.status, s.pages_title, s.pages_html_text from " . TABLE_PAGES . " p LEFT JOIN " .TABLE_PAGES_DESCRIPTION . " s on p.pages_id = s.pages_id where p.status = 1 and s.language_id = '" . (int)$languages_id . "' and p.page_type = 3");
$page_check = tep_db_fetch_array($page_query);

$pagetext=stripslashes($page_check[pages_html_text]);

#####################
?>
     <?php// osc-support-edition BOF
     // echo TEXT_POPUP_SHIPPING; ?>


<?php
// ExtraInfoPages
?>
 <p><?php echo $pagetext; ?> <p>

<?php// echo TEXT_POPUP_SHIPPING; ?>
    </div>
 
     

<script type="text/javascript">
$('#popupShipping').dialog({
  autoOpen: false,
  width: 600,
  height: 400,
  buttons: {
    Ok: function() {
      $(this).dialog('close');
    }
  }
});
</script>

<?php
// osc-support-edition EOF
?>

<?php require(DIR_WS_INCLUDES . 'footer.php'); ?>

</div> <!-- bodyWrapper //-->

<?php echo $oscTemplate->getBlocks('footer_scripts'); ?>

</body>
</html>
 

The <div id="popupShipping" title="<?php echo HEADING_POPUP_SHIPPING; ?>"> is between the body tags.

 

But - how/why the header_tags_opengraph.php grabs this for the meta property price, I don't understand. Must it be in that way?

Share this post


Link to post
Share on other sites

Few more questions are coming up.

 

As I understand, first step is to fill the tags. I choose to fill all tags and click on my language, which is written as "Deutsch". I assume, that the html-output of any page showing this:

 

<meta property="og:locale" content="en_US" />

 

is wrong. Where can I change this?

 

The shop is running without errors in the german language.

Share this post


Link to post
Share on other sites

If it is running fine in one language and not another then the problem almost has to be the languages directory.

Share this post


Link to post
Share on other sites

Unfortunately I don't know the reason.

 

A workaround could be to change in header_tags_opengraph.php:

 

// $ogArray['locale']  = str_replace('-', '_', $loc[0]);
$ogArray['locale']  = de_DE;

 

That brings up in the html-output:

 

<meta property="og:locale" content="de_DE" />

 

Does it matter, if it's hardcoded?

Share this post


Link to post
Share on other sites

As long as you only have the one language it is fine. If you have more than one and you can't get the code to work as it is coded, then you change it as you mentioned and also add an alternate tag for the other language(s), like this:

<meta property="og:locale:alternate" content="es_ES" />

Share this post


Link to post
Share on other sites

Well, I tried to follow exactly the instructions in the "How_to_operate" and "So_What_Good_is_it" files. Maybe depending on the German language, I still have a few questions/irritations.

 

In the shop is installed Ultimate SEO V 2.2d,  add "cPath to product URLs?" are set on "false" (is this correct?)

 

In the shop the "Use Search-Engine Safe URLs" are set on "false"

 

Here's the .htaccess:

 

# $Id$

# block unwanted bots
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT} ^(-?$|baidu|baiduspider|yandex|sogou|moget|ichiro|naverbot|yeti|youdaobot) [NC]
#    RewriteRule .* - [F,L]
    RewriteRule (.*) view_counter_trap.php [L]
</IfModule>

# view counter trap anyone trying to access admin
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_URI} \"/admin/\"
RewriteRule (.*) view_counter_trap.php [L]

# Redirect domain.com to www.domain.com

RewriteCond %{HTTP_HOST} ^xxx.de [NC]
RewriteRule ^(.*)$ https://www.xxx.de/$1[L,R=301]

# stop hotlinking (gif/jpg) and serve alternate content
# I have included an image for you to upload, please note if you use your images out side of your server (like linked into EBAY) you cannot use # this.

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www\\.)?xxx\\.de/.*$ [NC]
RewriteRule .*\\.(gif|jpg)$ https://www.xxx.de/images/stolen.gif [R,NC,L]
</ifModule>

# deny most common except .php

<FilesMatch \"\\.(inc|tpl|h|ihtml|sql|ini|conf|class|bin|spd|theme|module|exe)$\">
 deny from all
</FilesMatch>

# Disable .htaccess viewing from browser

<Files ~ \"^\\.ht\">
 Order allow,deny
 Deny from all
 Satisfy All
</Files>

<Files .htaccess>
order allow,deny
deny from all
</Files>

ErrorDocument 400 /Error.php?Error=400
ErrorDocument 401 /Error.php?Error=401
ErrorDocument 403 /Error.php?Error=403
ErrorDocument 404 /Error.php?Error=404
ErrorDocument 405 /Error.php?Error=405
ErrorDocument 408 /Error.php?Error=408
ErrorDocument 415 /Error.php?Error=415
ErrorDocument 416 /Error.php?Error=416
ErrorDocument 417 /Error.php?Error=417
ErrorDocument 500 /Error.php?Error=500
ErrorDocument 501 /Error.php?Error=501
ErrorDocument 502 /Error.php?Error=502
ErrorDocument 503 /Error.php?Error=503
ErrorDocument 504 /Error.php?Error=504
ErrorDocument 505 /Error.php?Error=505

# Disable access to config.php

<Files ~ \"includes\\configure.php$\">
</Files>

# The following makes adjustments to the SSL protocol for Internet
# Explorer browsers

<IfModule mod_setenvif.c>
 <IfDefine SSL>
 SetEnvIf User-Agent \".*MSIE.*\" \\
 nokeepalive ssl-unclean-shutdown \\
 downgrade-1.0 force-response-1.0
 </IfDefine>
</IfModule>

#
# This is used with Apache WebServers
#
# For this to work, you must include the parameter \'Options\' to
# the AllowOverride configuration
#
# Example:
#
# <Directory \"/usr/local/apache/htdocs\">
#   AllowOverride Options
# </Directory>
#
# \'All\' with also work. (This configuration is in the
# apache/conf/httpd.conf file)

AddType video/ogg .ogm
AddType video/ogg .ogv
AddType video/ogg .ogg
AddType video/webm .webm
AddType audio/webm .weba
AddType video/mp4 .mp4
AddType video/x-m4v .m4v

# If Search Engine Friendly URLs do not work, try enabling the
# following Apache configuration parameter

# AcceptPathInfo On

# Fix certain PHP values
# (commented out by default to prevent errors occuring on certain
# servers)

# php_value session.use_trans_sid 0
# php_value register_globals 1

AuthUserFile /mnt/webp/e3/52/51666952/htdocs/xxx/.htpasswd
AuthName \"shop\"
AuthType Basic
  <Limit GET POST>
   require valid-user
  </Limit>

# Begin Ultimate SEO V2.2d
Options +FollowSymLinks
RewriteEngine On

  # RewriteBase instructions
  # Change RewriteBase dependent on how your shop is accessed as below.
  # https://www.xxx.de = RewriteBase /
  # https://www.xxx.de/catalog/ = RewriteBase /catalog/  
  # https://www.xxx.de/catalog/shop/ = RewriteBase /catalog/shop/

  # Change the following line using the instructions above  
 
RewriteBase /

RewriteRule ^(.*)-p-(.*).html$ product_info.php?products_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-c-(.*).html$ index.php?cPath=$2&%{QUERY_STRING}
RewriteRule ^(.*)-m-(.*).html$ index.php?manufacturers_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-pi-(.*).html$ popup_image.php?pID=$2&%{QUERY_STRING}
RewriteRule ^(.*)-by-(.*).html$ all-products.php?fl=$2&%{QUERY_STRING}
RewriteRule ^(.*)-t-(.*).html$ articles.php?tPath=$2&%{QUERY_STRING}
RewriteRule ^(.*)-a-(.*).html$ article_info.php?articles_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-au-(.*).html$ articles.php?authors_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-pr-(.*).html$ product_reviews.php?products_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-pri-(.*).html$ product_reviews_info.php?products_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-f-(.*).html$ faqdesk_info.php?faqdesk_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-fc-(.*).html$ faqdesk_index.php?faqPath=$2&%{QUERY_STRING}
RewriteRule ^(.*)-fri-(.*).html$ faqdesk_reviews_info.php?faqdesk_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-fra-(.*).html$ faqdesk_reviews_article.php?faqdesk_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-i-(.*).html$ information.php?info_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-links-(.*).html$ links.php?lPath=$2&%{QUERY_STRING}
RewriteRule ^(.*)-pm-([0-9]+).html$ extra_info_pages.php?pages_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-n-(.*).html$ newsdesk_info.php?newsdesk_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-nc-(.*).html$ newsdesk_index.php?newsPath=$2&%{QUERY_STRING}
RewriteRule ^(.*)-nri-(.*).html$ newsdesk_reviews_info.php?newsdesk_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-nra-(.*).html$ newsdesk_reviews_article.php?newsdesk_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-po-([0-9]+).html$ pollbooth.php?pollid=$2&%{QUERY_STRING}
# End Ultimate SEO V2.2d

 

Now I'm running the test on the index.php, what brings up:

 

Test Results
  languages in the Header Tags table are: 2 ( Deutsch ).
Title and Meta Tag results for index.php?cPath=  explain
 Deutsch
  From Site:
    Title -> 301 Moved Permanently
    Meta Description ->
    Meta Keywords ->
  From Settings:
    Title -> 1234 (seems to be o.k.)
    Meta Description -> 1234 (seems to be o.k.)
    Meta Keywords -> 1234 (seems to be o.k.)
  Results of scan:
    index.php is missing Header Tags code or it is not installed correctly. Verify that Fill Tags has been ran and that the root checkbox or the default checkboxes have been checked in Page Control.

 

I don't understand "From site" statements/results and I also don't understand the missing Header Tags code.

 

The html-output of the index.php looks like this:

 

<!DOCTYPE html>
<html dir="ltr" lang="de"<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>xxx® - 1234</title>
 <meta name="Description" content="1234" />
 <meta name="Keywords" content="1234" />
 <meta http-equiv="Content-Language" content="de" >
 <meta name="googlebot" content="all" />
 <meta name="robots" content="noodp" />
 <meta name="slurp" content="noydir" />
 <meta name="revisit-after" content="1 days" />
 <meta name="no-email-collection" value="https://www.xxx.de"/>
 <link rel="canonical" href="https://www.xxx.de/" >
<meta property="og:site_name" content="xxx®" />
<meta property="og:locale" content="de_DE" />
<meta property="og:type" content="website" />
<meta property="og:image" content="" />
<meta property="og:url" content="https://www.xxx.de/"/>
 
<!-- EOF: Header Tags SEO Generated Meta Tags by oscommerce-solution.com -->

 

For me all what I see seems to be o.k. and filled properly.

 

And - my favicon.ico is not beeing displayed anymore?

 

Have you got any explanations or help for me?

 

Thank's in advance,

stefan
 

Share this post


Link to post
Share on other sites

Finally - how do Header Tags SEO Keywords work? I don't understand

 

"This page allows viewing the results of the search and tag cloud options. The position in the google listings can also be found by clicking the button in the Get Position column."

 

What's search and tag cloud options? There's no button nor a column Get Position?

Share this post


Link to post
Share on other sites

@@stefan21 The first problem seems that you did not run fill tags or that you didn't make the changes to the German language files. For the second, did you look at the help files in Page Control?

Share this post


Link to post
Share on other sites

Jack_mcs,

 

 

The first problem seems that you did not run fill tags

I did. I mean all I can see is that the tags in all pages are filled...

 

you didn't make the changes to the German language files

Mhmm, what changes? The only thing I see is to upload the files in /catalog/includes/english and /catalog/admin/includes/english to ./german.

 

Did I overlook something?

 

There's under modules a section (module) called "Header Tags" - right now, there's nothing installed. Is that o.k.? I don't know.

 

 

For the second, did you look at the help files in Page Control?

Yes. But I still don't understand...

Share this post


Link to post
Share on other sites

The are changes needed for both the shop and admin language files. Since you didn't make those you may have missed something else. Please make those changes and see if the problems still exist.

Share this post


Link to post
Share on other sites

Hello jack - in your description you said previous version could affect some page loading - I believe this happened with my site - I have upgraded store side now to v 3 still need to do admin - but my problem is still on store side - randomly some pages are blank - would you please tell me which file the typo was in so I can double check - thank you

 

 

 

My site is adult content - couplescorner.biz

Share this post


Link to post
Share on other sites

@@dallasbird I'm sorry but I don't know what this refers to. But, in general, the answer depends on the page that is blank and the version of your shop. You can place the line below after the error_reporting line in the includes/application_top.php file and it may show the reason for the failure. You may want to check to see if there is an error_log file in the shops root first since that would probably have the same content and save you making the change.

ini_set('display_errors','1');

Share this post


Link to post
Share on other sites

Jack_mcs,

 

sorry to bother you again - maybe I'm too stupid.

 

You wrote:

 

Posted Yesterday, 04:55

The are changes needed for both the shop and admin language files. Since you didn't make those you may have missed something else. Please make those changes and see if the problems still exist.

 

As I can see this are the files in /language to change for the shop side:

- english.php -> german.php:

 

/*** Begin Header Tags SEO ***/
define('BOX_HEADING_HEADERTAGS_TAGCLOUD', 'Popular Searches');
define('TEXT_SEE_MORE', 'see more');
define('TEXT_SEE_MORE_FULL', 'see more about %s');
define('HTS_OG_AVAILABLE_STOCK', 'Available Stock');
define('HTS_OG_PRICE', 'Price');
/*** End Header Tags SEO ***/

 

in the subdirectory /german:

- product_info.php

 

/*** Begin Header Tags SEO ***/
define('TEXT_VIEWING', 'Currently viewing:');
/*** End Header Tags SEO ***/

 

- products_reviews_info.php

 

/*** Begin Header Tags SEO ***/
define('TEXT_VIEWING', 'Currently viewing:');
/*** End Header Tags SEO ***/

 

admin side:

- engish.php -> german.php:

 

/*** 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_KEYWORDS', 'Keywords');
define('BOX_HEADER_TAGS_SILO', 'Silo Control');
define('BOX_HEADER_TAGS_SOCIAL', 'Social');
define('BOX_HEADER_TAGS_TEST', 'Test');
/*** End Header Tags SEO ***/
 

in the subdirectory /german:

- categories.php

 

/*** Begin Header Tags SEO ***/
define('TEXT_PRODUCT_METTA_INFO', 'Header Tags SEO Meta Tag Data');
define('TEXT_PRODUCTS_BREADCRUMB', 'Breadcrumb Text');
define('TEXT_PRODUCTS_PAGE_TITLE', 'Title Tag');
define('TEXT_PRODUCTS_PAGE_TITLE_ALT', 'Title Tag - Alternate');
define('TEXT_PRODUCTS_PAGE_TITLE_URL', 'Title Tag - URL');
define('TEXT_PRODUCTS_HEADER_DESCRIPTION', 'Meta Description');
define('TEXT_PRODUCTS_KEYWORDS', 'Meta Keywords');
define('TEXT_PRODUCTS_LISTING_TEXT', 'Product Listing Text');
define('TEXT_PRODUCTS_SUB_TEXT', 'Product Page Sub Text');
/*** End Header Tags SEO ***/

 

BTW - is that a typo?

"TEXT_PRODUCT_METTA_INFO" -> "TEXT_PRODUCT_META_INFO"

 

I was going about 5 times through the instructions and I'm sure, I followed carefully and completely... what did I overlook? Would it be helpful to give you the link to the shop?

Share this post


Link to post
Share on other sites

Jack_mcs:

 

Step one:  Fill Tags

result:

1 Category tags have been filled.
1 Manufacturer tags have been filled.
2 Product tags have been filled.

 

no errors reported.

 

Step two: Page control

Quick stats:

Quick Stats: (all should be 0 except keywords)
Categories Missing Descriptions: 0
Categories Missing Title/Tags: 0
Manufacturers Missing Descriptions: 0
Manufacturers Missing Title/Tags: 0
Keywords Searched: 0 Found:
Products Missing Title/Tags: 0

 

Step three: Filling the default tags including group, manufacturer, category and product. All meta tags except of robots and reply to are checked.

 

Step four: select option index.php

category, product, manufacturer and root checked

checking the box "view result" gives:

in yellow color: Title 301 Moved Permanently

in red color: Description and Keywords are empty

 

Viewing the html-source of index.php shows, that all tags are filled. The same with all other pages.

 

Performing the test with index.php shows:

index.php is missing Header Tags code or it is not installed correctly. Verify that Fill Tags has been ran and that the root checkbox or the default checkboxes have been checked in Page Control.

 

Here's my index.php:

 

<?php
/*
  $Id$

  osCommerce, Open Source E-Commerce Solutions
  http://www.oscommerce.com

  Copyright © 2010 osCommerce

  Released under the GNU General Public License
*/

  require('includes/application_top.php');

// ExtraInfoPages
#################
$page_query = tep_db_query("select p.pages_id, p.sort_order, p.status, s.pages_title, s.pages_html_text from " . TABLE_PAGES . " p LEFT JOIN " .TABLE_PAGES_DESCRIPTION . " s on p.pages_id = s.pages_id where p.status = 1 and s.language_id = '" . (int)$languages_id . "' and p.page_type = 1");
$page_check = tep_db_fetch_array($page_query);

$pagetext=stripslashes($page_check[pages_html_text]);
#####################

// the following cPath references come from application_top.php
  $category_depth = 'top';
  if (isset($cPath) && tep_not_null($cPath)) {
    $categories_products_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS_TO_CATEGORIES . " where categories_id = '" . (int)$current_category_id . "'");
    $categories_products = tep_db_fetch_array($categories_products_query);
    if ($categories_products['total'] > 0) {
      $category_depth = 'products'; // display products
    } else {
      $category_parent_query = tep_db_query("select count(*) as total from " . TABLE_CATEGORIES . " where parent_id = '" . (int)$current_category_id . "'");
      $category_parent = tep_db_fetch_array($category_parent_query);
      if ($category_parent['total'] > 0) {
        $category_depth = 'nested'; // navigate through the categories
      } else {
        $category_depth = 'products'; // category has no products, but display the 'no products' message
      }
    }
  }

  require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_DEFAULT);

  require(DIR_WS_INCLUDES . 'template_top.php');

  if ($category_depth == 'nested') {
    /*** Begin Header Tags SEO ***/
    $category_query = tep_db_query("select cd.categories_name, c.categories_image, IF(cd.categories_htc_title_tag_alt != '',cd.categories_htc_title_tag_alt,cd.categories_htc_title_tag) as categories_htc_title_tag, cd.categories_htc_description from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.categories_id = '" . (int)$current_category_id . "' and cd.categories_id = '" . (int)$current_category_id . "' and cd.language_id = '" . (int)$languages_id . "'");
    /*** end Header Tags SEO ***/
    $category = tep_db_fetch_array($category_query);
?>
 
<h1><?php echo $category['categories_htc_title_tag']; ?></h1>

<?php
/*** Begin Header Tags SEO ***/
if (tep_not_null($category['categories_htc_description'])) {
   echo '<h2 style="text-decoration:none;">' . $category['categories_htc_description'] . '</h2>';
}
/*** End Header Tags SEO ***/
?>

<div class="contentContainer">
  <div class="contentText">
    <table border="0" width="100%" cellspacing="0" cellpadding="2">
      <tr>
<?php
    if (isset($cPath) && strpos('_', $cPath)) {
// check to see if there are deeper categories within the current category
      $category_links = array_reverse($cPath_array);
      for($i=0, $n=sizeof($category_links); $i<$n; $i++) {
        $categories_query = tep_db_query("select count(*) as total from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.parent_id = '" . (int)$category_links[$i] . "' and c.categories_id = cd.categories_id and cd.language_id = '" . (int)$languages_id . "'");
        $categories = tep_db_fetch_array($categories_query);
        if ($categories['total'] < 1) {
          // do nothing, go through the loop
          /*** Begin Header Tags SEO ***/
          $categories_query = tep_db_query("select c.categories_id, cd.categories_name, c.categories_image, c.parent_id, IF(cd.categories_htc_description,cd.categories_htc_description,'') as hts_desc from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.parent_id = '" . (int)$category_links[$i] . "' and c.categories_id = cd.categories_id and cd.language_id = '" . (int)$languages_id . "' order by sort_order, cd.categories_name");
          /*** End Header Tags SEO ***/
          break; // we've found the deepest category the customer is in
        }
      }
    } else {
      /*** Begin Header Tags SEO ***/
      $categories_query = tep_db_query("select c.categories_id, cd.categories_name, c.categories_image, c.parent_id, IF(cd.categories_htc_description !='',cd.categories_htc_description,'') as hts_desc 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 sort_order, cd.categories_name");
      /*** End Header Tags SEO ***/
    }

    $number_of_categories = tep_db_num_rows($categories_query);

    $rows = 0;
    while ($categories = tep_db_fetch_array($categories_query)) {
      $rows++;
      $cPath_new = tep_get_path($categories['categories_id']);
      $width = (int)(100 / MAX_DISPLAY_CATEGORIES_PER_ROW) . '%';

      /*** Begin Header Tags SEO ***/
      $htsDesc = '';
      if (HEADER_TAGS_DISPLAY_CATEGORY_SHORT_DESCRIPTION !== 'Off' && tep_not_null($categories['hts_desc'])) {
          $lgth = (int)HEADER_TAGS_DISPLAY_CATEGORY_SHORT_DESCRIPTION;
          $htsDesc = '<br>';
          if (isset($categories['hts_desc'][$lgth])) {
              $htsDesc .= substr($categories['hts_desc'], 0, ($lgth - 3)) . '<span class="hts_listing_see_more">...' . TEXT_SEE_MORE . '</span>';
          } else {    
              $htsDesc .= $categories['hts_desc'];
          }
      }    
      echo '                <td align="center" class="smallText" width="' . $width . '" valign="top"><a href="' . tep_href_link(FILENAME_DEFAULT, $cPath_new) . '">' . tep_image(DIR_WS_IMAGES . $categories['categories_image'], $categories['categories_name'], SUBCATEGORY_IMAGE_WIDTH, SUBCATEGORY_IMAGE_HEIGHT) . '<br>' . $categories['categories_name']  . $htsDesc . '</a></td>' . "\n";
      /*** End Header Tags SEO ***/

      if ((($rows / MAX_DISPLAY_CATEGORIES_PER_ROW) == floor($rows / MAX_DISPLAY_CATEGORIES_PER_ROW)) && ($rows != $number_of_categories)) {
        echo '      </tr>' . "\n";
        echo '      <tr>' . "\n";
      }
    }

// needed for the new products module shown below
    $new_products_category_id = $current_category_id;
?>
      </tr>
    </table>

    <br />

<?php include(DIR_WS_MODULES . FILENAME_NEW_PRODUCTS); ?>

<!--- BEGIN Header Tags SEO Social Bookmarks -->
<?php if (HEADER_TAGS_DISPLAY_SOCIAL_BOOKMARKS == 'true') {
   echo '<div style="margin-top:5px; float:right;">';
   include(DIR_WS_MODULES . 'header_tags_social_bookmarks.php');
   echo '</div>';
 }
?>
<!--- END Header Tags SEO Social Bookmarks -->

  </div>
</div>

<?php
  } elseif ($category_depth == 'products' || (isset($HTTP_GET_VARS['manufacturers_id']) && !empty($HTTP_GET_VARS['manufacturers_id']))) {
// create column list
    $define_list = array('PRODUCT_LIST_MODEL' => PRODUCT_LIST_MODEL,
                         'PRODUCT_LIST_NAME' => PRODUCT_LIST_NAME,
                         'PRODUCT_LIST_MANUFACTURER' => PRODUCT_LIST_MANUFACTURER,
                         'PRODUCT_LIST_PRICE' => PRODUCT_LIST_PRICE,
                         'PRODUCT_LIST_QUANTITY' => PRODUCT_LIST_QUANTITY,
                         'PRODUCT_LIST_WEIGHT' => PRODUCT_LIST_WEIGHT,
                         'PRODUCT_LIST_IMAGE' => PRODUCT_LIST_IMAGE,
                         'PRODUCT_LIST_BUY_NOW' => PRODUCT_LIST_BUY_NOW);

    asort($define_list);

    $column_list = array();
    reset($define_list);
    while (list($key, $value) = each($define_list)) {
      if ($value > 0) $column_list[] = $key;
    }

    $select_column_list = '';

    for ($i=0, $n=sizeof($column_list); $i<$n; $i++) {
      switch ($column_list[$i]) {
        case 'PRODUCT_LIST_MODEL':
          $select_column_list .= 'p.products_model, ';
          break;
        case 'PRODUCT_LIST_NAME':
          $select_column_list .= 'pd.products_name, ';
          break;
        case 'PRODUCT_LIST_MANUFACTURER':
          $select_column_list .= 'm.manufacturers_name, ';
          break;
        case 'PRODUCT_LIST_QUANTITY':
          $select_column_list .= 'p.products_quantity, ';
          break;
        case 'PRODUCT_LIST_IMAGE':
          $select_column_list .= 'p.products_image, ';
          break;
        case 'PRODUCT_LIST_WEIGHT':
          $select_column_list .= 'p.products_weight, ';
          break;
      }
    }

// show the products of a specified manufacturer
    if (isset($HTTP_GET_VARS['manufacturers_id']) && !empty($HTTP_GET_VARS['manufacturers_id'])) {
      if (isset($HTTP_GET_VARS['filter_id']) && tep_not_null($HTTP_GET_VARS['filter_id'])) {
// We are asked to show only a specific category
        $listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS . " p left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_MANUFACTURERS . " m, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c where p.products_status = '1' and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$HTTP_GET_VARS['filter_id'] . "'";
      } else {
// We show them all
        $listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS . " p left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_MANUFACTURERS . " m where p.products_status = '1' and pd.products_id = p.products_id and pd.language_id = '" . (int)$languages_id . "' and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "'";
      }
    } else {
// show the products in a given categorie
      if (isset($HTTP_GET_VARS['filter_id']) && tep_not_null($HTTP_GET_VARS['filter_id'])) {
// We are asked to show only specific catgeory
        $listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS . " p left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_MANUFACTURERS . " m, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c where p.products_status = '1' and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = '" . (int)$HTTP_GET_VARS['filter_id'] . "' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$current_category_id . "'";
      } else {
// We show them all
        $listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m on p.manufacturers_id = m.manufacturers_id left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c where p.products_status = '1' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$current_category_id . "'";
      }
    }

    if ( (!isset($HTTP_GET_VARS['sort'])) || (!preg_match('/^[1-8][ad]$/', $HTTP_GET_VARS['sort'])) || (substr($HTTP_GET_VARS['sort'], 0, 1) > sizeof($column_list)) ) {
      for ($i=0, $n=sizeof($column_list); $i<$n; $i++) {
        if ($column_list[$i] == 'PRODUCT_LIST_NAME') {
          $HTTP_GET_VARS['sort'] = $i+1 . 'a';
          $listing_sql .= " order by pd.products_name";
          break;
        }
      }
    } else {
      $sort_col = substr($HTTP_GET_VARS['sort'], 0 , 1);
      $sort_order = substr($HTTP_GET_VARS['sort'], 1);

      switch ($column_list[$sort_col-1]) {
        case 'PRODUCT_LIST_MODEL':
          $listing_sql .= " order by p.products_model " . ($sort_order == 'd' ? 'desc' : '') . ", pd.products_name";
          break;
        case 'PRODUCT_LIST_NAME':
          $listing_sql .= " order by pd.products_name " . ($sort_order == 'd' ? 'desc' : '');
          break;
        case 'PRODUCT_LIST_MANUFACTURER':
          $listing_sql .= " order by m.manufacturers_name " . ($sort_order == 'd' ? 'desc' : '') . ", pd.products_name";
          break;
        case 'PRODUCT_LIST_QUANTITY':
          $listing_sql .= " order by p.products_quantity " . ($sort_order == 'd' ? 'desc' : '') . ", pd.products_name";
          break;
        case 'PRODUCT_LIST_IMAGE':
          $listing_sql .= " order by pd.products_name";
          break;
        case 'PRODUCT_LIST_WEIGHT':
          $listing_sql .= " order by p.products_weight " . ($sort_order == 'd' ? 'desc' : '') . ", pd.products_name";
          break;
        case 'PRODUCT_LIST_PRICE':
          $listing_sql .= " order by final_price " . ($sort_order == 'd' ? 'desc' : '') . ", pd.products_name";
          break;
      }
    }

    /*** Begin Header Tags SEO ***/
    if (isset($HTTP_GET_VARS['manufacturers_id'])) {
      $image = tep_db_query("select manufacturers_image, manufacturers_name as catname from " . TABLE_MANUFACTURERS . " where manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "'");
      $image = tep_db_fetch_array($image);
      $db_query = tep_db_query("select IF(manufacturers_htc_title_tag_alt != '',manufacturers_htc_title_tag_alt,manufacturers_htc_title_tag) as htc_title, manufacturers_htc_description as htc_description from " . TABLE_MANUFACTURERS_INFO . " where languages_id = '" . (int)$languages_id . "' and manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "'");
    } elseif ($current_category_id) {
      $image = tep_db_query("select c.categories_image, cd.categories_name as catname from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.categories_id = '" . (int)$current_category_id . "' and c.categories_id = cd.categories_id and cd.language_id = '" . (int)$languages_id . "'");
      $image = tep_db_fetch_array($image);
      $db_query = tep_db_query("select IF(categories_htc_title_tag_alt != '',categories_htc_title_tag_alt,categories_htc_title_tag) as htc_title, categories_htc_description as htc_description from " . TABLE_CATEGORIES_DESCRIPTION . " where categories_id = '" . (int)$current_category_id . "' and language_id = '" . (int)$languages_id . "'");
    }
    $htc = tep_db_fetch_array($db_query);
?>

<h1><?php echo $htc['htc_title']; ?></h1>
    <?php /*** End Header Tags SEO ***/ ?>

<div class="contentContainer">

<?php
// optional Product List Filter
    if (PRODUCT_LIST_FILTER > 0) {
      if (isset($HTTP_GET_VARS['manufacturers_id']) && !empty($HTTP_GET_VARS['manufacturers_id'])) {
        $filterlist_sql = "select distinct c.categories_id as id, cd.categories_name as name from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where p.products_status = '1' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id and p2c.categories_id = cd.categories_id and cd.language_id = '" . (int)$languages_id . "' and p.manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "' order by cd.categories_name";
      } else {
        $filterlist_sql= "select distinct m.manufacturers_id as id, m.manufacturers_name as name from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " . TABLE_MANUFACTURERS . " m where p.products_status = '1' and p.manufacturers_id = m.manufacturers_id and p.products_id = p2c.products_id and p2c.categories_id = '" . (int)$current_category_id . "' order by m.manufacturers_name";
      }
      $filterlist_query = tep_db_query($filterlist_sql);
      if (tep_db_num_rows($filterlist_query) > 1) {
        echo '<div>' . tep_draw_form('filter', FILENAME_DEFAULT, 'get') . '<p align="right">' . TEXT_SHOW . ' ';
        if (isset($HTTP_GET_VARS['manufacturers_id']) && !empty($HTTP_GET_VARS['manufacturers_id'])) {
          echo tep_draw_hidden_field('manufacturers_id', $HTTP_GET_VARS['manufacturers_id']);
          $options = array(array('id' => '', 'text' => TEXT_ALL_CATEGORIES));
        } else {
          echo tep_draw_hidden_field('cPath', $cPath);
          $options = array(array('id' => '', 'text' => TEXT_ALL_MANUFACTURERS));
        }
        echo tep_draw_hidden_field('sort', $HTTP_GET_VARS['sort']);
        while ($filterlist = tep_db_fetch_array($filterlist_query)) {
          $options[] = array('id' => $filterlist['id'], 'text' => $filterlist['name']);
        }
        echo tep_draw_pull_down_menu('filter_id', $options, (isset($HTTP_GET_VARS['filter_id']) ? $HTTP_GET_VARS['filter_id'] : ''), 'onchange="this.form.submit()"');
        echo tep_hide_session_id() . '</p></form></div>' . "\n";
      }
    }


    /*** Begin Header Tags SEO ***/
    if (tep_not_null($htc['htc_description'])) {
        echo '<h2 style="text-decoration:none;">'. $htc['htc_description'] . '</h2>';
    }
    /*** End Header Tags SEO ***/
          
    include(DIR_WS_MODULES . FILENAME_PRODUCT_LISTING);
?>

</div>
    <!--- BEGIN Header Tags SEO Social Bookmarks -->
    <?php if (HEADER_TAGS_DISPLAY_SOCIAL_BOOKMARKS == 'true') {
      echo '<div style="margin-top:5px; float:right;">';
      include(DIR_WS_MODULES . 'header_tags_social_bookmarks.php');
      echo '</div>';    }
    ?>
    <!--- END Header Tags SEO Social Bookmarks -->


<?php
  } else { // default page
?>

<h1><?php echo HEADING_TITLE; ?></h1>

<div class="contentContainer">
  <div class="contentText">
    <?php echo tep_customer_greeting(); ?>
  </div>

<?php
/*    if (tep_not_null(TEXT_MAIN)) {
?>

  <div class="contentText">
    <?php echo TEXT_MAIN; ?>
  </div>

<?php
    }
*/
// ExtraInfoPages
echo $pagetext;

    /* include(DIR_WS_MODULES . FILENAME_NEW_PRODUCTS); */

    //<!--- Begin Header Tags SEO Home Page Text and Social Bookmarks -->
    if (tep_not_null($header_tags_array['home_page_text'])) {
      echo '<div>';
      echo '<div style="padding:10px 0;">' . $header_tags_array['home_page_text'] . '</div>';
      echo '</div>';
    }

    if (HEADER_TAGS_DISPLAY_SOCIAL_BOOKMARKS == 'true') {
      echo '<div>';
      include(DIR_WS_MODULES . 'header_tags_social_bookmarks.php');
      echo '</div>';
    }
    //<!--- END Header Tags SEO Home Page Text and Social Bookmarks -->    
      
    include(DIR_WS_MODULES . FILENAME_UPCOMING_PRODUCTS);  
?>

</div>

<?php
  }

  require(DIR_WS_INCLUDES . 'template_bottom.php');
  require(DIR_WS_INCLUDES . 'application_bottom.php');
?>
 

What's wrong?

 

Or should I ignore the test result, I mean, all tags are filled?

Share this post


Link to post
Share on other sites

@@stefan21 Please don't post code unless it is asked for. It makes it difficult for others to find solutions and I won't go through it since it requires too much time.

 

With so much posted, I'm lost in what the problem is. I appreciate you trying to think ahead and supply details but it is too confusing in the case. As far as I can tell, the problem is that you are seeing a redirect when using the View Result link. That could be caused by two things:

 

1 - That link won't work properly for all sites due to how the ssl is setup. If it doesn't show the expected results, use the browsers view source option to check the page.

 

2 - Your shop is being redirected on purpose. In this case, the redirection should not be noticed but it is and that means the redirect is probably not being done correctly. That can hurt the site quite a bit so you should get that fixed, if that is the case. If you are not sure If this is the case, test your site here. The result should be 200 OK.

 

Please let me know if I misunderstood the problem.

Share this post


Link to post
Share on other sites

 

@stefan21 Please don't post code unless it is asked for. It makes it difficult for others to find solutions and I won't go through it since it requires too much time.

o.k.

 

2 - Your shop is being redirected on purpose. In this case, the redirection should not be noticed but it is and that means the redirect is probably not being done correctly.

The shop has a permanent redirection - it's forced to https.

 

If you are not sure If this is the case, test your site here. The result should be 200 OK.

It does - but only if I enter https:// *NOT* with http://

 

I did a test with a vanilla clean installation of an 2.3.4 English only shop. I uploaded all files without changing a piece of code.

 

Results of scan:

    index.php is missing Header Tags code or it is not installed correctly. Verify that Fill Tags has been ran and that the root checkbox or the default checkboxes have been checked in Page Control.

 

What I see in some files is that the code is older as this one in the 2.3.4 shop which I downloaded a few days ago and used for this test. Maybe this could be a reason?

 

I'm sorry, I give up. Thank you for your patience, I'll use it anyway. As I already told, all tags are filled. I think that's what's important.

 

stefan

Edited by stefan21

Share this post


Link to post
Share on other sites

Regarding the ssl, if you are forcing the change just via the .htaccess file, which has been mention on these forums for how to that, that is incorrect. You need to change all of the urls in both configure files to properly handle the switch. If you check your url using https and it shows 200 OK as a result, then that is correct. If you check your url using http and it doesn't show a 301 redirect, then your site is not setup properly.

 

Don't get hung-up on the test section. Part of that code needs to determine the version of the shop that is in use and that is very difficult because there wasn't a standard way of handling it for many versions. So if it doesn't interpret your version correctly, it can cause results like that.  If it says tags are missing but you can see them when viewing the source, then rely on the latter.

 

For the files, the Edge version gets updated quite often so there is just no way to keep up with the file changes. The included files for each version in this addon are correct for the version that was out at the time the addon was uploaded. The files in the Edge version may have been changed ten times by now so they won't match.

 

Yes, it is important that the tags are filled in. The most important ones are usually the ones for the home page so you might want to make sure that those reflect your main target keywords.

 

I understand it is easy to get frustrated when setting this up but it really is worth it in the long-run so don't hesitate to ask if you get stuck on something.

Share this post


Link to post
Share on other sites

Jack_mcs,

 

thank you for your support - it's a great addon anyway.

 

Last question: I'd like to have my favicon back - have you got any idea how to fix this?

 

stefan

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×