How do I use category-specific colours? - php

The Wordpress theme I am using (Multinews) comes with the ability to assign colour schemes to entire categories, so that all posts within that category take on the colour scheme that is assigned to that category.
However, I have added a couple of features to the design (ie a coloured dropcap on the first letter of the article) and would like to assign the category-colours to them, too.
For example, at http://www.mediatoday.org.uk/media/television-and-radio/2014/10/25/evan-davis-interview-with-russell-brand-was-fifteen-minutes-of-television-gold/ you'll see orange is the category colour, but the dropcap (the large R) is currently blue.
If you could please advise me on how to add the category-colour style to other features, I'd really appreciate it.

By chance I worked on the same theme recently so I know what you're trying to find out. The thing is - the theme authors have that color built into their framework. They get the color selected depending on if the page or a category is being displayed and then they literally put it into the underneath the menu.
If you inspect the HTML of your menu - the cat color is inside the HTML - it's not in any CSS atributes.
Try looking at the code of the menu and use the same principal:
if ($item->object == 'category') {
$cat_ID = $item->object_id;
$cat_data = get_option("category_".$cat_ID);
$cat_color = isset($cat_data['color']) ? $cat_data['color'] : '' ;
if ($cat_color != '') {
$cl = $cat_color;
}
} elseif ($item->object == 'page') {
$page_color = get_post_meta($item->object_id, 'mom_page_color', true);
if ($page_color != '') {
$cl = $page_color;
}
}
it's the menu.php file under multinews\framework\menus folder

Related

Drupal 8 change image style in first row on views list

I have created view that displays on page 10 newest article. I have in row two fields: image and content. In settings of image field I chose image style (for example: medium). How can I change image style to another (example: large) only in first row?
I have tried it in preprocess but i don't know where is stored information about image style:
function theme_preprocess_views_view_unformatted__lista_depesz_default(&$variables) {
$view = $variables['view'];
$rows = $variables['rows'];
$style = $view->style_plugin;
$options = $style->options;
$variables['default_row_class'] = !empty($options['default_row_class']);
foreach ($rows as $id => $row) { $variables['rows'][$id] = array();
$variables['rows'][$id]['content'] = $row;
$variables['rows'][$id]['attributes'] = new Attribute();
if ($row_class = $view->style_plugin->getRowClass($id)) {
$variables['rows'][$id]['attributes']->addClass($row_class);
}
if ($id == 0 && $row['content']['#row']->_entity->field_image[0] != NULL) {
//some php code to change image style
}
}
}
Regards
You can create view with original images, and set style inside your twig files, using for example twig tweak:
https://www.drupal.org/project/twig_tweak
Inside twig file you can set any style with conditioning
{{ 'public://images/ocean.jpg' | image_style('thumbnail') }}
Regarding your code and your explanations, I'm not sure to understand what you are trying to achieve.
1/ you try to add a CSS class to the 1st image of your view. Why not using the following CSS path .my_view .first img {}
2/ if you try to call another image style, can you create a view with only the 1st item, or a promoted? Then a second view with the rest of the items ?
3/ if you try to call another image style, you can do it without any code.
You install the module http://drupal.org/project/views_conditional then you add 2 images with 2 different image style, and you apply your condition inside the condition fieldset.
I really prefer the solution 3 because it's pure Drupal build.
I hope it helps.
Cheers

if title contains string 'aaa','bbb' or ,'ccc' replace field {category[1}

Hello gods of Stackoverflow,
Now i hate to be "that guy" who didnt search properly but i am running into a problem that i need a fix for and can't find a solution i can work with because of my lack in coding skills, my knowledge barely tickles the surface.
Here's the thing.
I am using a tool to import feeds into my website (WP all Import) as woocommerceproducts. But in the categorization the feed suppliers made errors which i want to tackle without emailing them everytime i stumble upon one.
i.e: the title contains words like satchel, bag, clutch etc but the product is categorized as 'jewellery > earrings' in the CSV or XML.
The import tool will ask me where to find the product category, i point it to the node {category[1]}
But when the category is missing or faulty i want it to check the title for certain words, and if present change the value of it to that found word.
something like:
[if ({title[1]}contains "satchel") {
category = "bags > satchel",
} else if ({title[1]} contains clutch) {
category = "bags > clutch",
} else {
category = {sub_category[1]} #the normal value if nothing was found
}]
I just can't find the pieces to put the formatting together. I might need to work towards a function that i could expand to generate categories based solely out of presence of certain words in the title but maybe when i get better that would be an option.
I hope i was able to provide a clear view on the problem. The "[ ]" is there because thats how the plugin wants code to be entered instead of a {fieldname[1]}, another example below:
The following was an example of a problem i was able to fix:
i needed to replace values like "0/3months/1/2months" to "0-3 months/1-2months" before i replaced the slash"/" with a pipe"|" for wordpress to recognize it as a seperate value.
[str_replace("/","|",
str_replace("0/3","0-3",
str_replace("1/2","1-2",
str_replace("3/6","3-6",{size[1]}))))]
The fields can also be used to call functions but only in the 'pro' version of the plugin.
Any help is very much appreciated, thanks in advance.
You could use strpos.
Example:
if (strpos($title, "satchel") !== false) {
$category = "bags > satchel";
}
So after an afternoon of poking around, testing stuff, and not knowing alot about php i came up with a solution with help from a friend.
Wp All Import does not allow custom php directly from the field itself, it does however support custom php functions and provides an editor for these on the bottom of the import configuration page. I did the following:
<?php
//Checks Title for keywords and
//uses those to create categories
//We are using our own Main categories so only
//sub and subsub categroies need to be created.
//Call function
[get_subcat_from_title({title[1]},{category[1]})]
//Function
function get_subcat_from_title($title,$defaultcat)
{
if (strpos($title,"Satchel") !== false) {
$cat = "Tassen";
} elseif (strpos($title,"Travel") !== false) {
$cat = "Tassen";
} elseif (strpos($title,"Gusset") !== false) {
$cat = "Tassen";
} else {
$cat = $defaultcat;
}
return $cat;
}
//Checks Title for keywords and uses those to create subcategories
//Call Function
[get_subsubcat_from_title({title[1]},{sub_category[1]})]
//Function
function get_subsubcat_from_title($title,$defaultcat)
{
if (strpos($title,"Satchel") !== false) {
$cat = "Satchel";
} elseif (strpos($title,"Travel") !== false) {
$cat = "Travel";
} elseif (strpos($title,"Gusset") !== false) {
$cat = "Gusset";
} else {
$cat = $defaultcat;
}
return $cat;
}
?>
On the Taxonomies, Tags, Categories option we can create our own hierarchical order like this:
[main category]
+[sub category]
++[sub sub category]
The main category field is given a name we use as our main category.
The sub category is filled with function SUBCAT
The subsub category is filled with function SUBSUBCAT
this way it will create a parent by our own name, a child that has the named 'Tassen' if any keyword is present, and a grandchild with the specific keyword as it's name.
This way i can expand the function using all kinds of statements when the right category isn't present in de provided feed.
thanks #sebastianForsberg for responding.
I hope this helps anyone who comes across a similar problem in the future..

Wordpress posts in columns

I am trying to create a wordpress theme. i would like to have three columns with post excerpts. But the problem is that they don't always have the same height (and i don't want them to), so when in one row a post is too high, the next row will start too far away.
Hmmm, i can really explain it, so i created this fiddle to show what i mean:
//in the fiddle there is html and css making a clear example of what i mean
http://jsfiddle.net/59qyD/1/
As you can see post id#5 is too long, so post #7 doesn't go any more under post #4.
What i would like is to find a solution where the post always "go up" to the previous post in that column. If possible, without any plugins...
Any ideas?
To create a dynamic column height no matter if it's images/posts/products, you can apply Masonry JS
This JS offers you the possibility to fit each new div under the previous div from the above line, and has a great effect of showing it.
Here is a PHP + CSS based solution:
PHP:
$count = 0;
$count_total = 10; // or use dynamic count: count($all_posts)
$columns = 3;
foreach ( $all_posts as $k=>$v ) {
$count++;
$is_first_column = false; // always set to false, then set to true only when the condition matches!
// Now check is this a post for the first column
if( $count==1 || ($count-1)%$columns==0 ) { // check if it's 1st and every 4,7,10 post and place it in 'column 1'
// set additional class for every post that need to be placed in the first column
$is_first_column = true;
}
// Now you can add the additional class to the html markup:
<article id="post-<?php the_ID(); ?>" class="post col<?php if( !empty( $is_first_column ) ) { echo ' column_1'; } ?>">
}
And then use CSS to clear the float for every .column_1.
CSS:
.column_1 {
clear: both;
}
I used similar approach in multiple projects and it worked. The code above may need to me modified a bit to work for your specific theme, but I hope you'll get the main idea.
It will work immediately after page + CSS load (no waiting for JS to load)! :-)

Joomla get content by ajax

How to get joomla content using ajax? (I want to show content of specyfic page in popup), this is my code: (called by ajax)
$option = JRequest::getCmd('option');
$view = JRequest::getCmd('view');
if ($option=="com_content" && $view=="article") {
$ids = explode(':',JRequest::getString('id'));
$article_id = $ids[0];
$article =& JTable::getInstance("content");
$article->load($article_id);
echo '<h2>'.$article->get("title").'</h2>';
echo $article->get("introtext"); // and/or fulltext
}
This works fine only for artilces, but the problem is when for example I want to show category, or component
Please see your if condition it checks if option is equal to com_content & view is equal to article only. If view contains category it won't work. So add the conditions in if statement so that your code gets executed.
for category you need to add view=category & like for other components as well.

Get custom advanced parameter from article in my module in Joomla

I have a small news module on the home page in my website. It shows the news articles added from the Joomla admin.
It shows the article title in the module section.
But I do not want to show article title in the news module on the home page. I need to show some other text in the news module instead of the news title.
For this I have added a new custom parameter called "News title" in the article manager.
This new custom parameter is getting saved and updated properly with the other article content.
But I am having problems while retrieving the value of this custom parameter in the news module.
Below is the code which is used to get the title of the article in the module.
// getting content
$this->content = $newsClass->getNewsStandardMode($categories, $sql_where, $this->config, $this->config['news_amount']);
//
$this->SIDTab = $this->content['SID'];
$this->titleTab = $this->content['title'];
$this->textTab = $this->content['text'];
$this->idTab = $this->content['ID'];
$this->cidTab = $this->content['CID'];
Below is my code used to show article title.
function render(&$params)
{
$content = array();
//
for($i = 0; $i < count($this->idTab); $i++)
{
$content[$i] = '';
//
if($this->config['links'] == 1)
{
$url = $this->idTab[$i].'&Itemid='.$this->config['item_id'];
if ($this->config['url'] != ""){
$content[$i] .= '<a href="'.$this->config['url'] .'">';
} else {
$content[$i] .= '<a href="'.JRoute::_(ContentHelperRoute::getArticleRoute($url, $this->cidTab[$i], $this->SIDTab[$i])).'">';
}
}
// some more code }
Please help.
Thanks.
When the module is getting the parameters, it is pull the module parameters, not the parameters from the article. The parameters for the article are stored in the attributes fields in the jos_content table. You'll need to get your text from there.
There is an easier way to do this without hacking the core. I noticed that you do not have any intro text in your article. It would be much easier to put the text you want to use at the beginning of the article content and insert a read more break after it. Now the text you want will be processed as intro text by Joomla. You can set it to display in the module and to be hidden in the article view. This prevents you from having to hack the core so you can update easily and should make it easier to display the content you want.

Categories