Monday, February 13, 2017

Warning You Do Not Have Access to the Administrator Section of This Site


  • Step 1: Check if the user is really an administrator: In many cases, this error happens when the person is trying to login with a user who’s not an administrator (usually this happens when the person has two users on the website, and he’s logging in with the wrong user) or who’s no longer an administrator (someone might have revoked administrative access for that user). Checking if the user is an administrator is easy – all you need to do is to check if the id of the user is assigned to the right group in the table jos_user_usergroup_map (replace jos with your table prefix) usually it is 8   If all is OK (the user is assigned to the right group) then we move to the next step… (If not then we fix the problem)
  • Step 2: Check if the ACL tables are not corrupt: This is where it gets tricky since Joomla’s ACL tables are not that easy to understand. However, if the login problem is because of ACL corruption, then in 99% of the cases the error lies somewhere in the jos_viewlevels and/or the jos_usergroups tables. We suggest that you look at a clean Joomla database and compare the two tables of that database with those in your website’s database. If the ACL tables are corrupt, then we manually fix them (fixing these tables should only be done by an expert) – if not, then (you’ve guessed it!) we move to the next step.
  • Step 3: Check the jos_assets table: If all else fails, then (sadly) the problem almost certainly lies in the jos_assets table (which is, by far, the scariest table in Joomla – because a simple mistake in that table can cause a total collapse of the website). The two most common causes in the jos_assets table that might lead to this problem are:
    1. Missing entry for the com_admin row.
    2. Wrong rules field for the com_admin row. The rules field for that row should just contain “{}”. (two curly brackets)

Sunday, January 15, 2017

Save Failed with the Following Error: Invalid Parent ID

When I have seen first time this error on Joomla 1.6 while tried to save a new article in Article Manager I was lost:

Save Failed with the Following Error: Invalid Parent ID
I was diggin' around to see what can be wrong, and the final clue leading me to the solution where come from a phpMyAdmin checkup. Weird thing was that the article has been saved, but I found an unexpected value in the article's database record: the article wasn't assigned to any category ID and found a value which I wasn't knowing back then what a heck is for: a column called asset_id with value set to zero.

And this clue has been leading me to the solution (BTW, first step with rebuilding the menu might be unnecessary, but I decided to leave it there - because can't harm, but might fix similar errors in menu system you are not aware of - yet):
  • Go to the Menu Manager – Click on Menus, Menu Manager, Click on the ‘Rebuild’ button
  • You will see a message that says:
    Successfully rebuilt
  • Go to the Category Manager – Click on Content, Category Manager, Click on the ‘Rebuild’ button.
  • You will see a message that says:
    Categories tree data successfully rebuilt.
  • Edit all your parent categories and save them.
  • Edit all your sub-categories and save them.
  • Go back to the Article Manager, edit all the articles that were created with the ‘Invalid Parent ID” error message and save them again.
After refreshing your menus, categories you should not have any problems creating new articles anymore. As to the existing articles that had asset_id = 0, those asset_id’s will get populated after you open and save the articles.

As you might guessed allready, the error was generated by the fact that the category tree structure was messed up for some reason.

If you fail then watch video for more solutions 







Friday, November 13, 2015

Get it right

This blog solely is for Joomla professionals.  

Being a Joomla professional sometimes we do get into trouble solving a problem while creating a Joomla website.

Many errors suddenly creep up and you may end up searching for solutions in Joomla forum and not find solution immediately.  There could be some simple works, changes in your Joomla website that you need to do.  Like for example changing the copyright field in the footer.   Not everytime you will like to visit the Joomla forum for that.  Not always you will find instant Joomla solutions at Joomla forum.

Here at this blog an effort is made to solve some of your Joomla problems that you encounter while working in Joomla.

The advantage is that you will find the solution here always and instantly just by seeing the title of post. 

It will be fast and quick. 

Thursday, May 28, 2015

Product fields in Joomla Virtuemart

Product Page Fields:
For category fields, look here http://forum.virtuemart.net/index.php?topic=97744.0

PLEASE see http://forum.virtuemart.net/index.php?topic=98505.0


Product Name
<?php echo $this->product->product_name ?>

Product SKU
<?php echo $this->product->product_sku ?>

Ask a question about this product
<a class="ask-a-question" href="<?php echo $url ?>" ><?php echo JText::_('COM_VIRTUEMART_PRODUCT_ENQUIRY_LBL') ?></a>
Short Description
   <?php echo $this->product->product_s_desc ?>

Product Full Description
      <?php echo $this->product->product_desc ?>

Product MAIN Image (the 0 is the column number for the 1st image)
<?php echo $this->product->images[0]->displayMediaFull('class="product-image"',false) ?>

Additional Images (>1 means all images past the 1st image)
      <?php if(!empty($this->product->images) && count($this->product->images)>1) {
         foreach ($this->product->images as $image) {
            echo $image->displayMediaThumb('class="product-image"',true,'class="modal"'); //'class="modal"'
         }
}
?>

Product Availability AS TEXT
<?php echo $this->product->product_availability; ?>

Product Availability As Picture
<?php echo JHTML::image(JURI::root().VmConfig::get('assets_general_path').'images/availability/'.$this->product->product_availability, $this-
>product->product_availability, array('class' => 'availability')); ?>

Minimum Order Level
<?php echo $this->product->min_order_level ?>

Maximum Order Level
<?php echo $this->product->max_order_level ?>

Product Unit
<?php echo $this->product->product_unit ?>

Product Weight
<?php echo $this->product->product_weight ?>

Product Weight Unit of Measure
<?php echo $this->product->product_weight_uom ?>

Product Length
<?php echo $this->product->product_length ?>

Product Width
<?php echo $this->product->product_width ?>

Product Height
<?php echo $this->product->product_height ?>

Product URL
<?php echo $this->product->product_url ?>

Product # In Stock
<?php echo $this->product->product_in_stock ?>

Product Availability Date
<?php echo $this->product->product_available_date ?>

Product Special 0 or 1 0 for no, 1 for yes.
<?php echo $this->product->product_special ?>

Product Packaging
<?php echo $this->product->product_packaging ?>

Create a link to the product's main category from the product page.
$catturl = JRoute::_('index.php?option=com_virtuemart&view=category&virtuemart_category_id='.JRequest::getInt('virtuemart_category_id',0));

<a href="<?php echo $catturl ?>"><?php echo $this->category->category_name ?></a>

Manufacturer Name
<?php echo $this->product->mf_name ?>

All Fields Above can be used for extra fields, and features on the product page.

For example. I use product weights of 0 to be items with free shipping. So, to display "FREE Shipping"  to the user, I do this.

<?php if ($this->product->product_weight == 0) { ?>
                  <div>Free Shipping on this Item! Minimum Order Quantity <?php echo $this->product->min_order_level ?></div>
               <?php    }?>

So the code above shows free shipping, and the minimum quantity order amount.

You can do the same with most fields.

To display an icon, or text if a product is featured you can do this.

<?php if ($this->product->product_special == 1) { ?>
                  <div>SALE ITEM!!!!! </div>
               <?php    }?>

Tell the customer the stock is low, and they should order NOW!
<?php if ($this->product->product_in_stock <= 10) { ?>
                  <div>ONLY <?php echo $this->product->product_in_stock ?> In Stock. ORDER BEFORE IT'S TOO LATE</div>
               <?php    }?>

Doing a Joomla Template Override is easy.

Open the view folder you want to change, THEN, the tmpl folder.
COPY the "default.php"
THEN< follow the steps below.
In your JOOMLA template folder. You create a folder called  "html" then a folder called "com_virtuemart" in it.
Then for each view you want to override. Create a folder for it.
Then place your modified "default.php" an that views folder.
So , to override the product details page. You create YOUR_TEMPLATE/html/com_virtuemart/productdetails/default.php

Doing a Joomla Template override guarantees the view will use your modified default.php

FOR changing the css. What you do is copy the virtuemart css located in
com_virtuemart/assets/css/vmsite-ltr.css

THEN, add that to your joomla template css file. (or call it seperately, AFTER you put a copy in your Joomla template foler)
THEN, go to vmart configuration, and turn off virtuemart css

Custom Fields in Joomla Virtuemart

Custom Field Codes for Coders

S = String
I =Integer
P =Parent
B= Bolean (True)
D = Date
T = Time
M =Image
V =Cart Variant
A =Generic Child Variant
X=Editor
Y=Textarea

For example
<?php if ($field->field_type == S){
My Special String Output
} ?>


Using The Custom Field Type "String" for an extra field.

Warranty Display Example
1st Setup a Custom field type "string" called "warranty" like in the picture below.
Next Go Into a product, and apply the custom field "warranty" to the product.
Fill In the warranty text. 2 years, 3 years etc.

NEXT:: You need to create a position in your product details view for the warranty text.
<div id="warranty-text"><strong>This is the Warranty Div</strong>
<?php if (!empty($this->product->customfieldsSorted['warranty'])) {
   $this->position='warranty';
   echo $this->loadTemplate('customfields'); } ?></div>


Use the Custom field "IMAGE" to display a NON-cart Variant.

Free Shipping Icon on product page example.

1st Create a Custom field type "image" and name it "shipping icon" like the image below.
Next, upload your free shipping icon in "shop media files"
Go to edit product, and apply the custom field. Choose the image in the dropdown.


Using a String for external images


Create a Custom field  type "string" named "external"
In Edit Product apply the field. Paste the url to the image in the field.
This below is the code for displaying the image.

<div class="product-fields">
       <?php
       $custom_title = null;
       foreach ($this->product->customfieldsSorted[external] as $field) {
      if ($field->display) {
          ?>
          <?php if ($field->custom_title != $custom_title) { ?>
            <img src="<?php echo $field->display ?>" alt="<?php echo $this->product->product_name ?>"  />
<?php } ?>
          <?php } ?> <?php } ?>
        </div>


Using a String to Link to related articles, installation instructions etc.


Create a Custom field  type "string" with the name "Installation Instructions" or whatever you want the anchor text to be.
Assign it to the position "link"
In Edit Product apply the field. Paste the url
This below is the code for displaying the link.

<div class="product-fields">
       <?php
       $custom_title = null;
       foreach ($this->product->customfieldsSorted[link] as $field) {
      if ($field->display) {
          ?>
          <?php if ($field->custom_title != $custom_title) { ?>
             <a href="<?php echo $field->display ?>" ><?php echo JText::_($field->custom_title); ?></a>
<?php } ?>
          <?php } ?> <?php } ?>
        </div>


Error solution...

Warning: Invalid argument supplied for foreach() 

default_customfields

or 

default.php

In  default.php

This is how the ontop is done

<?php  if (!empty($this->product->customfieldsSorted['ontop'])) {
   $this->position = 'ontop';
   echo $this->loadTemplate('customfields');
    } // Product Custom ontop end
    ?>


When you choose "cart variant" the default position will be in the add to cart form.

THEN,
the ONLY other default positions in the product layout is

"ontop"
THIS CODE IS IN views/productdetails/tmpl/default.php

if (!empty($this->product->customfieldsSorted['ontop'])) { ?>
   <div class="product-fields">
   <?php
   $custom_title = null ;
   foreach ($this->product->customfieldsSorted['ontop'] as $field){
      if ($field->display) {
         ?><div class="product-field product-field-type-<?php echo $field->field_type ?>">
         <?php if ($field->custom_title != $custom_title) { ?>
            <span class="product-fields-title" ><?php echo JText::_($field->custom_title); ?></span>
            <?php if ($field->custom_tip) echo JHTML::tooltip($field->custom_tip,  JText::_($field->custom_title), 'tooltip.png');
         } ?>
         <span class="product-field-display"><?php echo $field->display ?></span>
         <span class="product-field-desc"><?php echo jText::_($field->custom_field_desc) ?></span>
         </div>
         <?php
         $custom_title = $field->custom_title;
      }
   } ?>
   </div>
<?php } // Product Custom ontop end ?>


YOU can actually set your own positions anywhere. By copying this code, and renaming the "position"
YOU JUST change the 'ontop'


<?php if (!empty($this->product->customfieldsSorted['ontop'])) { ?>
   <div class="product-fields">
   <?php
   $custom_title = null ;
   foreach ($this->product->customfieldsSorted['ontop'] as $field){
      if ($field->display) {
         ?><div class="product-field product-field-type-<?php echo $field->field_type ?>">
         <?php if ($field->custom_title != $custom_title) { ?>
            <span class="product-fields-title" ><?php echo JText::_($field->custom_title); ?></span>
            <?php if ($field->custom_tip) echo JHTML::tooltip($field->custom_tip,  JText::_($field->custom_title), 'tooltip.png');
         } ?>
         <span class="product-field-display"><?php echo $field->display ?></span>
         <span class="product-field-desc"><?php echo jText::_($field->custom_field_desc) ?></span>
         </div>
         <?php
         $custom_title = $field->custom_title;
      }
   } ?>
   </div>
<?php } // Product Custom ontop end ?>

You can do your own location of custom field.

<?php if (!empty($this->product->customfieldsSorted['my-position'])) {
       $this->position='my-position';
       echo $this->loadTemplate('customfields');
    }
    ?>



 I try to use the below code after the price is displayed but nothing happens... i don't get the custom fields displayed.


<?php if (!empty($this->product->customfieldsSorted['my-position'])) {
       $this->position='my-position';
       echo $this->loadTemplate('customfields');
    }
    ?>


 Change ..    my-position

 ....    to YOUR position

Tuesday, May 26, 2015

Image size does not change in article

Q -  I resized the image and uploaded to my Joomla article but still the image is in the original size in the article.

Ans.  Simply rename the image file and and link it to article.   You will find the new image file size reflecting in article.