A place for users and developers of the Xataface to discuss and receive support.
by macassist » Sun Nov 11, 2007 5:47 pm
Hi there, me again,
is it possible to format records (like colour them red) based on the value of one of the record's fields? For the sales reports I mentioned in my previous post, we need to highlight sales of quantity zero, as that indicates orders from customers which haven't been able to be supplied (this is for a wholesaler selling through other wholesalers).
Any thought very welcome.
Sean
-
macassist
-
- Posts: 10
- Joined: Wed Oct 24, 2007 8:52 pm
by shannah » Sun Nov 11, 2007 6:33 pm
Yes. You can implement the css__tableRowClass() method in the delegate class. This is meant to return a CSS class that can be applied to the row for that record.
e.g.
- Code: Select all
function css__tableRowClass(&$record){ if ( $record->val('approved') == 'YES' ){ return 'approved-transaction-row'; } else return ''; }
Then in your CSS file you could define some characteristics for rows with the class 'approved-transaction-row' applied to it: e.g. - Code: Select all
tr.approved-transaction-row { background-color: red; }
Beware that some versions of IE don't respect the background-color property on the tag, so you would probably have to do:
- Code: Select all
tr.approved-transaction-row td { background-color: red; }
i.e. apply the background color to the individual cells.
(IMHO IE 6 should be banned. It makes like difficult for us web developers).
-Steve
-
shannah
-
- Posts: 4457
- Joined: Wed Dec 31, 1969 5:00 pm
by macassist » Mon Nov 12, 2007 6:42 pm
Hi Steve,
thanks for the prompt reply.
I tried what you suggested, but it's not highlighting the zero qty sales - here are my code snippets...
in /tables/vwkly_sales/vwkly_sales.php
- Code: Select all
class tables_vwkly_sales { function css__tableRowClass(&$record){ if ( $record->val('sale_qty_hidden') == '0' ){ return 'zero_sale_row'; } else return ''; } function block__before_nav_menu(){ df_display(array('prod'=>&$prod), 'menu.html'); } function init(&$vwkly_sales){ $auth =& Dataface_AuthenticationTool::getInstance(); $user =& $auth->getLoggedInUser(); if ( $user and $user->val('user_role') != 'ADMIN' ){ // We apply the security filter to non admin users. $vwkly_sales->setSecurityFilter(array($user->val('user_filter_field')=>$user->val('user_filter_value'))); } } }
in /dataface/plone.css - Code: Select all
tr.zero_sale_row { background-color: red; }
None of the zero qty sales are showing as red-backgrounded - is this a style conflict (maybe with the testing of whether it's an odd or even row)?
Any further help very much appreciated
Sean
-
macassist
-
- Posts: 10
- Joined: Wed Oct 24, 2007 8:52 pm
by shannah » Mon Nov 12, 2007 8:07 pm
First thing to check is if the css class is actually getting applied. You can do this by checking the html source of the page and do a find for 'zero_sale_row'.
If it is getting applied but the rows are not showing up red, then it is a CSS issue.
If it is not getting applied then it is a PHP issue.
If you find that it is a CSS issue, refer to my note in my previous post about IE and its issues with background colors on tr tags.
If you find that it is a PHP issue, there are a couple of things you can do.
1. I notice that you are comparing the 'sale_qty_hidden' value to the string '0' rather than the integer 0. Is this intentional. Perhaps try the integer 0 instead.
2. You should place some debugging code inside the css__tableRowClass() method to make sure that it is being called. (i.e. add some echo statements and see if they show up in the resulting page --- if you do this make sure you check the html source for the output - not just the resulting page).
-Steve
-
shannah
-
- Posts: 4457
- Joined: Wed Dec 31, 1969 5:00 pm
by macassist » Mon Nov 12, 2007 9:17 pm
Hi Steve,
yes, the zero_sale_row is appearing in the source:
- Code: Select all
class="listing odd zero_sale_row"
So it looks like the listing and odd classes are getting precedence.
Unfortunately, I'm no CSS guru, so if anyone can help me out with how to fix this CSS precedence issue, I'd be very appreciative.
Regards
Sean
-
macassist
-
- Posts: 10
- Joined: Wed Oct 24, 2007 8:52 pm
by shannah » Tue Nov 13, 2007 5:16 am
Cascading stylesheets give the last style rule the precedence. If your rules are at the end of the plone.css file, then it will get the precedence, and not the odd class.
You can force precedence by adding '!important' after your rule.
e.g.
- Code: Select all
tr.zero_sale_row { background-color: red !important}
justs in case something is overriding your setting. Which browser are you using? As I mentioned before, IE may not respect background-color on a tr tag. You may have to change the rule to: - Code: Select all
tr.zero_sale_row td { background-color: red}
On a side note, it is not good practice to be altering the plone.css file directly. Better to make your own stylesheet and include it.
http://xataface.com/documentation/how-t ... avascripts
-Steve
-
shannah
-
- Posts: 4457
- Joined: Wed Dec 31, 1969 5:00 pm
by macassist » Tue Nov 20, 2007 6:51 pm
OK, got it working...
As a side note I've used custom_stylesheets, but that's not where the problem was - it was that I was using a hidden field for the validation. I've changed over to using 3 other fields (which, when the hidden field is zero, two of them are also 0 and the third is not empty) and the zero sale rows are now colored red (well, I used a lighter shade of red because I was getting cross-eyed with full red).
Thanks for the help, Steve.
Sean
-
macassist
-
- Posts: 10
- Joined: Wed Oct 24, 2007 8:52 pm
by fantomasdm » Wed Jul 23, 2008 2:12 pm
for using css style sheet in relative rocord list?
-
fantomasdm
-
- Posts: 114
- Joined: Thu Mar 13, 2008 2:35 pm
by shannah » Fri Jul 25, 2008 3:16 pm
Currently the related record list isn't as flexible to deal with as the regular result list. So there is no way (off the top of my head) without actually modifying the xataface source to customize the class of a row.
-
shannah
-
- Posts: 4457
- Joined: Wed Dec 31, 1969 5:00 pm
by jvinolas » Mon Jun 21, 2010 10:38 am
Hi, I have one problem: the code only works if I use: - Code: Select all
tr.baixa-row td { background-color: red;}
Does nothing with your code: - Code: Select all
tr.baixa-row { background-color: red;}
But the problem is that, when it works (with td format), only changes background of first field (checkbox), not all the row. Is it possible to get all the row rendered as well? Thanks.
-
jvinolas
-
- Posts: 51
- Joined: Thu Apr 15, 2010 12:31 am
by shannah » Mon Jun 21, 2010 10:45 am
Yes... I think IE doesn't let you apply backgrounds to tr tags (I would have though they would support this by IE 8, but maybe not).
Not sure why it's not updating the color of all of your rows. It's hard to comment without looking directly at the HTML that is produced to know if the CSS should be working.
You may want to add a !important to your rule to make sure it's not getting overridden by later rules.
-Steve
-
shannah
-
- Posts: 4457
- Joined: Wed Dec 31, 1969 5:00 pm
by jvinolas » Tue Jul 06, 2010 10:31 am
It was the !important command. Thanks a lot!
-
jvinolas
-
- Posts: 51
- Joined: Thu Apr 15, 2010 12:31 am
by rtresidd » Mon Sep 03, 2012 9:03 pm
Hi Steve I was trying to use this particular method for working on rows of related records.. but no methods existed in the php to handle this.. So I've added some code to be able to assign a css handler for a related record based on the related records relationship name. seems to work and others may find it useful: In RelatedList.php: In the function "toHtml()" :around line 432 (version 1.9 3856) just prior to the code: echo "<tr class=\"listing $rowClass\" style=\"$style\" id=\"row_$rrecid\">"; add : - Code: Select all
$rowClass .= ' '.$this->getRelatedRowClass($rrec, $this->_relationship_name);
Then add in this function to the same file: - Code: Select all
function getRelatedRowClass(&$record, &$relationship_name){ $del =& $this->_table->getDelegate(); $functionName = 'css__relatedTableRowClass_' . $relationship_name; if ( isset($del) and method_exists($del, $functionName ) ){ return $del->$functionName ($record); } return ''; }
now in the delegate php file you can do something like: - Code: Select all
function css__relatedTableRowClass_RELATIONSHIP_NAME( &$record ){ if ( $record->val('BoardModStatus') == 'Outstanding' ) return 'outstanding-mods-row'; else return ''; }
I'm really beginning to like this interface Cheers Richard
-
rtresidd
-
- Posts: 14
- Joined: Sun Aug 19, 2012 8:23 pm
by shannah » Sat Sep 08, 2012 10:31 am
Good solution. I have added it to the issue tracker so hopefully I can get this in for the next release. http://bugs.weblite.ca/view.php?id=1148One piece of optimization is that you don't actually need to pass the relationship name as the 2nd parameter since the first parameter is a Dataface_RelatedRecord object, and it contains a reference to the relationship. E.g. - Code: Select all
$rowClass .= ' '.$this->getRelatedRowClass($rrec);
And - Code: Select all
function getRelatedRowClass(&$record){ $relationship_name = $record->_relationshipName; $del =& $this->_table->getDelegate(); $functionName = 'css__relatedTableRowClass_' . $relationship_name; if ( isset($del) and method_exists($del, $functionName ) ){ return $del->$functionName ($record); } return ''; }
-
shannah
-
- Posts: 4457
- Joined: Wed Dec 31, 1969 5:00 pm
by rtresidd » Tue Sep 11, 2012 2:05 am
Hi Steve Cheers for the optimization. I'm doing most of my editing in a notepad++ and unfortunately I'm still figuring out what is available in each class etc I'm still rather new to php and don't really have a nicer editing environment... Thanks Richard
-
rtresidd
-
- Posts: 14
- Joined: Sun Aug 19, 2012 8:23 pm
Return to Xataface Users
Who is online
Users browsing this forum: No registered users and 3 guests
|