Re: Code review: icms_ipf_Metagen

I'm still uncovering a lot of hidden gems in the existing code base. For example, most uses of icms_ipf_Metagen don't make use of all the arguments available - there are 4: title, keywords, description, and 'category path'. Only the first argument is required. There isn't a lot of information about these arguments in the comments. So, read and experiment!

As it turns out, imBlogging constructs $categoryPath and it does much of what I'm setting out to do - utilize the category, author, and other filters that could change the content of the index page. icms_ipf_Metagen->setTitle() does use the 4th argument in preparing what the meta title will be.

Here's how I'm using it now in imblogging/index.php, in the same spot as in my previous post -

// some combination of the module, category, author, and page #

$page_title = icms_getModuleName(false);

 

// some combination of the module, category, author, and page #

$page_keywords = $icmsModuleConfig['module_meta_keywords'];

 

// some combination of the module, category, author, and page #

$page_description = $icmsModuleConfig['module_meta_description'];

 

// icms_ipf_Metagen takes 4 arguments - the last is 'categoryPath'

$page_category_path = $category_path;

 

/* Generating meta information for this page */

$icms_metagen = new icms_ipf_Metagen($page_title, $page_keywords, $page_description, $page_category_path);

$icms_metagen->createMetaTags();

Except for the pagination factor, the page title is  now different in more cases than it was before - good for all things SEO and SERPs. Because the content of each page is going to change as posts are added, is this going to be much of a factor? That post that was on page 1 last month might be on page 2 next month, along with several other posts. I think I'll leave this and focus next on the logic for addressing the various sources of keywords and description.

Topic | Forum


Re: Code review: icms_ipf_Metagen

A lot of interesting things have come out of this review! There are several things that can be done to improve your overall SEO with a few updates to the modules that leverage the IPF classes.

One of the most important things for every site's SEO is having unique page titles. This becomes challenging when the script page doesn't change and the arguments passed to the page change. For example, in imBlogging, index.php can display a list of the most recent blog posts, blog posts in a particular category (imTagging), or posts by a particular author. These all can have multiple pages, so the page number is also a component of the page.

icms_ipf_Metagen:_construct() has arguments to help with all this. The first argument is the page title, the second is the page keywords, the third argument is the page description. There is a fourth argument (category path) that I'm still investigating.

A few things that I have found beneficial -

  • Add a module meta keywords configuration option
  • Add a module meta description configuration option
  • Add a module 'show module name in breadcrump' option

These can all be done by adding a few lines to your icms_version.php file and updating the module from the admin control panel. You also need to add some language constants to describe these options before updating the module.

For imBlogging, here's what I added

$modversion['config'][] = array(
    'name' => 'show_mod_name_breadcrumb',
    'title' => '_MI_IMBLOGGING_MODNAME_BREADCRUMB',
    'description' => '_MI_IMBLOGGING_MODNAME_BREADCRUMB_DSC',
    'formtype' => 'yesno',
    'valuetype' => 'int',
    'default' => 1);

$modversion['config'][] = array(
    'name' => 'module_meta_keywords',
    'title' => '_MI_IMBLOGGING_KEYWORDS',
    'description' => '_MI_IMBLOGGING_KEYWORDS_DSC',
    'formtype' => 'textbox',
    'valuetype' => 'text',
    'default' => '');

$modversion['config'][] = array(
    'name' => 'module_meta_description',
    'title' => '_MI_IMBLOGGING_METADESC',
    'description' => '_MI_IMBLOGGING_METADESC_DSC',
    'formtype' => 'textbox',
    'valuetype' => 'text',
    'default' => '');

The language constants go in {your module}/language/{your language}/modinfo.php. For these additions, it would look like this -

define('_MI_IMBLOGGING_MODNAME_BREADCRUMB', 'Include Module Name in Breadcrumb and Title');
define('_MI_IMBLOGGING_MODNAME_BREADCRUMB_DSC', 'Do you want the module name included as part of the paget title?');
define('_MI_IMBLOGGING_METADESC', "Module's Meta Description");
define('_MI_IMBLOGGING_METADESC_DSC', 'The meta description to be used for the main page of the module');
define('_MI_IMBLOGGING_KEYWORDS', 'Default keywords for the module');
define('_MI_IMBLOGGING_KEYWORDS_DSC', 'The meta keywords to be used for the main page of the module');

Adding this will do nothing to your front end - unless you make some modification there, too. The page that benefits most from this is the index.php at the root of the module (imblogging/index.php). It does not have anything to generate meta tags (current release). Adding it is quite simple and once the above options are added and values are saved in them, you'll have a page title, meta keywords, and meta description you can influence from your admin page. I've added this just before the inclusion of the footer -

/**
 *  Generating meta information for this page
 *  This page will generate several 'pages'
 *  As the number of posts increases, there will be multiple pages
 *  The page can also be filtered by category (imTagging) - which has its own meta properties
 *  And, you can get a list of posts by an author
 *  We need to account for all these to provide unique page titles for them all (at a minimum)
 */

// some combination of the module, category, author, and page #
$page_title = icms_getModuleName(false);

// some combination of the module, category, author, and page #
$page_keywords = $icmsModuleConfig['module_meta_keywords'];

// some combination of the module, category, author, and page #
$page_description = $icmsModuleConfig['module_meta_description'];

/* Generating meta information for this page */
$icms_metagen = new icms_ipf_Metagen($page_title, $page_keywords, $page_description);
$icms_metagen->createMetaTags();

As you can see, the variables that affect the page content can be made part of the title, the keywords, and the description. For now, it is pretty simple and I'm still working on the logic to update based on category, author, and page. I'll post an update once I have an approach for them. If you have ideas and suggestions - feel free to post them here!

Oh - and for you to see this in your site, you'll need a theme that uses the core meta variables, like this, as an example -

        <title><{if $icms_pagetitle !=''}><{$icms_pagetitle}> - <{/if}><{$icms_sitename}></title>
        <meta name="keywords" content="<{$icms_meta_keywords}>" />
        <meta name="description" content="<{$icms_meta_description}>" />

As it stands, this will give you a different page title, meta keywords, and meta description for the main page of this module (and others like it). I'll post updates so that the category, author, and page # will also automatically update these values.

Topic | Forum


Re: set permissions

This was added to the wiki soon after this!



Re: Which of our publishing modules (news, articles, etc) support group-level permissions?

The method for managing permissions is part of the core - and we have a nice tutorial in the wiki from QM-B on how he implemented it that started out as a discussion in the forums.



Re: Code review: icms_ipf_Metagen

There's so much to be found in the forum! And there are a lot of yet to be utilized parts of the core.

Here's one about opengraph and schema.org - Re: Question about facebook social plugin - a mere 10 years ago.



Re: Code review: icms_ipf_Metagen

There are other meta data that should be controlled by the site - some are not relevant for all, like location and geo data. To move towards a 'no code' solution, where this is done through the admin panel or a module, we'll have to consider impact for those, like you and I, that have built themes to include these data and what injecting the new meta data into the theme and how we go about doing it.

Back on the easy stuff: There's a config option being checked by the current metagen methods - $icmsModuleConfig['show_mod_name_breadcrumb'] - that I don't believe is in any module. It is part of the title generation and the breadcrumb generation. Just so you know.



Re: Code review: icms_ipf_Metagen

You are using the same pragmatic approach I've used until now, but this kind of functionality really shouldn't be handled in the theme layer or each module separately, but site-wide. Whether we make metagen smarter or extensible, or have a separate module to handle the metadata on a site-wide bases are both possibilities.



Re: Code review: icms_ipf_Metagen

I've built in the metadata for open graph (Facebook/Instagram and Pinterest, mostly) and Twitter into the themes I use, using the same template vars ($icms_pagetitle, $icms_meta_keywords, $icms_meta_description, etc).

The next thing I was hoping to work out is a method for determining the components of each value. You could set preferences to change the pattern of your pagetitle - like %post title% %category% %module% - %sitename%, or %category%: %post title% - %module%, %sitename%. That way, you have control and flexibility, and you don't have to edit a bunch of files to make changes.

This method would also allow you to make it work with whatever theme you were using. Again, without having to edit the theme.



Re: Code review: icms_ipf_Metagen

PHPStorm identifies loads of parts of the code that contain repetitive statements, so your findings are more or less expected. We can't fix them all at once, and the metagen is a good place to start.

This is an area that can be more fleshed out as well, I would expect the metagen function to be able to generate other metadata like the ones for facebook, twitter (sorry, 'X'), linkedin, schema.org and the likes.

When metagen was developed, those newer systems weren't there yet (or not as ubiquitous), now they're the norm and search engines have reduced or dropped the importance of the fields we're generating at the moment.



Re: Code review: icms_ipf_Metagen

Here are some code snippets to look at -

libraries/icms/ipf/Metagen.php - setTitle()

These both have this:  @todo Remove this and use the proper data filter and HTML Purifier

include/functions.php - icms_html2text()

include/functions.php - icms_purifyText()

My review is that at this point, when the title tag is being rendered, the title has already been filtered and purified before being saved in the database, and then retrieved and sent to these functions. It's important to note that the title is not sent through these functions for rendering on the page.



Code review: icms_ipf_Metagen

I'm working through a few things on a couple of sites and looking a little more into ways to improve readability for all readers - people and search engines.

Page titles are always a key thing and it is something we need to pay more attention to. The ICMS IPF Metagen class handles creating meta tags, including the title. However, much of it was done before we implemented HTML Purifier and our standard filtering practices for content being saved into the database and before it is rendered.

What I find happening is punctuation - which is allowed - is being stripped out, making it a little awkward to read. It all starts in icms_ipf_Metagen->setTitle(). The first thing it does is call icms_html2text(), a function to strip HTML tags and replace HTML entities with text equivalents. Then, icms_purifyText() gets called to strip out punctuation. The post title displays as desired in the content, but the meta title is altered.

Would removing those 2 function calls be risky? After all, a module following the IPF methods and any module saving content is having the content filtered before being added to the database. I think these 2 functions served a different purpose, and the code comments even indicate they should be replaced by other methods already in the core.

There are other parts of this to explore in more detail. Just starting with this one, since it isn't one that can be overridden by other properties saved with the post, like the keywords, description, and short URL text can be.



Re: Admin theme development

I am working on the mockups in plain HTML, that works easier than directly in Smarty. it's coming along quite well for a first iteration.


Attach file:



png  icms-coreui-acp-theme-preview.png (873.38 KB)
1102__2469066035b30044ce.png 2850X1526 px


Re: Admin theme development

I was wrong on the theming for the pages : the Adsense page for example does not take into account theme templates. It does work with a different template defined in a template set, so I'm taking that route for the moment.



Re: Admin theme development

Alas, no. The reflex theme doesn't really define new blocks that are used in the ACP part of the admin theme. It defines a new CSS that gives the existing layout a fresh coat of paint, but nothing more than that. I'll try to dig up an ancient version of the new theme MrTheme started working on several years back, he did a total overhaul if I'm not mistaken. Let's see if I can get it working on 2.0 RC1.



Re: Admin theme development

If the reflex theme is still working, there are template overrides for blocks in it -

\themes\reflex\modules\system\blocks\



Re: Admin theme development

I create a new theme without theme.html, but with theme_admin.html as main template. That part works well, I can have the overall structure of my page defined by that template. The ACP page content such as adsense can also be themed. I'm still working on re-theming the table component, but that's just figuring out how to understand those admittedly very complex theme files.

The only thing I haven't been able to get to theme are the blocks. But the start page of the ACP is only made out of blocks, so it's quite a big deal if I want to have a modern-looking and inviting first impression



Re: Admin theme development

How are you attempting to override the admin theme? I know a theme can add another option to the admin theme selector. I’m not sure how to override an existing admin theme. 



Admin theme development

I have been looking into upgrading our admin theme, as the current one is way out of date (no mobile support for instance). I made some good headway working out the theme_admin.html template, but once you want to go and change some more detailed parts such as the way the content of the ACP blocks is rendered, I'm hitting a wall.

It looks like the template overrides don't work in the context of the ACP. I'm going through some debugging sessions at the moment to try to figure out why that is exactly, but that is a major roadblock in getting a new, fresh admin theme out there.

To be continued



Re: is there a current gallery module?

Looking at the code, there appears to be 4 fields for storing the image information, one it is received. There may be some nuances in how the control is rendered - try using 'multiple=multiple' as the extra argument and see what you get. Once that is working, have a look at modules/system/admin/images/main.php - function imanager_addfile(). It steps through the FILE variable and handles multiple files, though I don't see how this is set to work in the core.



Re: is there a current gallery module?

I added several image fields in the event class, and I want to use the promoimage4 field to handle the multiple images as a gallery. Have a look on github : https://github.com/fiammybe/events/blob/add-previous-events/src/class/Event.php




 Top