Category: Web Development

  • Select template by Section in Joomla 1.5

    Problem: In Joomla 1.5, at present, there is no way to set the template applied to an article or category  based on the section that article is in. Templates can be set by menu item, but not by the overall section they reside in. This means that if multiple templates are being used, each time a new article is added, changes have to be made to the template setup too – very tedious. All I wanted was to be able to create an article or category, add it to a certain section, and know that it would be rendered/displayed using a particular template:

    Fix: This took some searching and tweaking. I found a post in the Joomla developers forum about someone trying to do something similar, but their example code was broken. It was enough to get me started though.

    What you need to do is: find and open application.php in the includes directory on the root of your Joomla 1.5 installation. Then find line 309 or thereabouts and look for this code:

    // Allows for overriding the active template from the request
    $template = JRequest::getCmd('template', $template);
    $template = JFilterInput::clean($template, 'cmd'); // need to filter the default value as well

    Insert AFTER the comment on line 309, but BEFORE line 310, add this code:

    // Templates by Section hack - Begin
    
    $eItemView = JRequest::getVar('view');
    $eItemId = JRequest::getVar('id');
    
    $sectionId = NULL;
    
    $eItemId = (strpos($eItemId,":"))? substr($eItemId,0,strpos($eItemId,":")) : $eItemId;
    
    switch ($eItemView) {
    case "article":
    $edb =& JFactory::getDBO();
    $eQuery = 'SELECT sectionid FROM #__content WHERE id LIKE '.$eItemId.'';
    $edb->setQuery($eQuery, 0, 1);
    $sectionId = $edb->loadResult();
    break;
    case "category":
    $edb =& JFactory::getDBO();
    $eQuery = 'SELECT section FROM #__categories WHERE id LIKE '.$eItemId.'';
    $edb->setQuery($eQuery, 0, 1);
    $sectionId = $edb->loadResult();
    break;
    case "section":
    $sectionId = $eItemId;
    break;
    }
    
    // Edit the section id below, you can find it in the sections admin area.
    if ($sectionId == "1") {
    $template = "rhuk_milkyway_red"; // Use the full template name.
    }
    // Add more if clauses if there are other templates.
    
    // Templates by Section hack - End

    Hopefully you can see what this does. It looks for the section id to use in 3 ways, depending on whether joomla is currently displaying a section root page, a category root page, or an article. It then looks to see whether that section id has had a specific template specified for it by name.

    This hack works well for me, I only need to add the different template data once in application.php for a given site. Ideally someone needs to make an admin mod for this, so that sections and categories can be assigned different templates in the backend. Maybe one day I’ll make one, but not unless there’s demand 🙂

    Any questions, corrections or thoughts, please comment below (no need to create an account or anything!)

  • Textpad Regular Expressions

    TextPad is a great editor, been using it for years, but never really used it to it’s full potential. Recently I needed to do some find/replace work in some huge SQL and CSV files – huge enough to make manual editing impossible – so I had to start using Textpad’s Regular Expression capabilities.

    Here are a few expressions that came in handy. I intend to add to this list as time goes on.
    Regexp shown in Green, my comments in Red:

    CSV Editing:

    Remove spaces and tab characters at the beginning of a line:
    Find what: <span style="color: #008000;">^[ t]+</span>
    Replace With: <span style="color: #ff0000;">don't enter anything in the field</span>

    Remove spaces and tab characters at the end of a line:
    Find what: <span style="color: #008000;">[ t]+$</span>
    Replace With: <span style="color: #ff0000;">don't enter anything in the field</span>

    Add “Hello” to the beginning of every line:
    Find what: <span style="color: #008000;">(^.*)</span>
    Replace With: <span style="color: #008000;">Hello 1</span>

    Add “Hello ” to the beginning and ” World” to the end of every line:
    Find what: <span style="color: #008000;">(^.*)</span>
    Replace With: <span style="color: #008000;">Hello 1 World</span> <span style="color: #ff0000;">(watch the spaces)</span>

    Find empty fields (i.e. “, ,”) with spaces or tabs in, and replace with empty field (“,,”):
    Find what: <span style="color: #008000;">,[ t*],</span>
    Replace With: <span style="color: #008000;">,,</span> <span style="color: #ff0000;">(just that, nothing else, just 2 commas)</span>

    Remove blank lines in a text file, by searching for two linebreaks next to each other, and replacing with one:
    Find what: <span style="color: #008000;">nn</span>
    Replace With: <span style="color: #008000;">n</span>

    Replacement Expressions:

    Extract email addresses only from the following text: “Joe Blogs (job.blogs@blogsworld.com)”
    This expression searches for 2 tagged expressions, firstly any printable characters including spaces up to the first open bracket symbol, secondly anything between the brackets. It then replaces the whole line with the second match.
    Find what: <span style="color: #008000;">^([[:graph:] ]+)(([[:graph:] ]+))</span>
    Replace With: <span style="color: #008000;">2</span>

    Submitted by Paul: “Here’s how to convert csv to xml with a (quite large) regexp you can alter/extend for your needs.”
    Find what: <span style="color: #008000;">^"([[:print:]]+)","([[:print:]]+)","([[:print:]]+)"</span>
    Replace With: <span style="color: #008000;">123</span>

    Notes:

    • The expressions above need the ‘Regular Expression’ condition to be ticked in the Find or Replace dialogue boxes for them to work.
    • Text pad needs to be set to use UNIX not POSIX style expressions. To set this, open ‘Configure > Preferences’ (Ctrl+Q,P), find the ‘Editor’ settings, and untick the ‘Use POSIX regular expression syntax’ box.

    Please let me know if this post was useful with a click!
    Nope, not helpful...Yep, more useful than not!+27 thumb, 29 overall.
    Loading…

  • Centre and float a div over page content with CSS – no hacks, cross browser

    Problem

    If you need to center a div (or any another block element) over the rest of the content in a page, and you need it to be cross-browser and valid (CSS and XHTML)…

    Solution

    Try the following CSS in your stylesheet or page head:

    #cdiv {
      position:absolute; /* important. */
      left:50%; /*important if you want it absolutely centred in window. */ 
      margin-left:-50px; /* importnant. must be half the width. */
      width:100px; /* set to your requirements, but remember left margin setting. */
      height:100px; /* not neccessary if the element needs to grow with content. */
      border:1px solid #ABF; /* not important. */
      background-color:#DDF; /* not important. */
      text-align:center; /*not important. */
    }

    … and now set the ID of the element you want centered to ‘cdiv’. If the item you want to centre is an image, remember to add display:block; to the style (this makes it act like a block level element).

    This style works perfectly (by my testing, but I’m not perfect) on:

    • Internet Explorer 6, 7 & 8+
    • Firefox 2.*+
    • Opera 8 & 9+
    • Google Chrome (all versions)
    • Safari (Mac and PC versions)
    • Netscape 9 (is anyone still using this?)
    Any problems, please post a question or comment below.

    Please let me know if this post was useful with a click!
    Nope, not helpful...Yep, more useful than not! (No Ratings Yet)
    Loading…