Dynamic content
-
If you look at the page above, you will see there is a very small table that describes the attributes of a fern cultivar. I was thinking of creating a table for each particular cultivar but there may be 100s of them. Another approach would be to have one dynamic table that could insert the content from an external file. Is it possible to change the short code to include a parameter that would be the index to the external file, something like [table id=145 key=”xxx” /]. Or is there a better way of doing this?
I have written some filters that manipulate the content in a tablepress tableThe page I need help with: [log in to see the link]
-
Hi,
thanks for your post, and sorry for the trouble.
Your best chance for this should be to use the TablePress Extension from https://tablepress.org/extensions/row-filter/
You’d then have to put all data in one big table, where each row resembles one fern cultivar. (The labels that you have in the first column right now would be the column headings.)
Using the Extension you could then filter the table to include just the desired entry.Then, to again get the data displayed as a column and not a row, you could use the
flipmode of the Extension from https://tablepress.org/extensions/responsive-tables/Regards,
TobiasThanks
I got the row-filtering to work but not the flip
This is my code:
[table id=152 filter=”Athyrium filix-femina&&Moulzie Burn” responsive=flip responsive_breakpoint=all/]
and this is the page
I now have
TablePress Version 1.9
TablePress Extension: Responsive Tables Version 1.4
TablePress Extension: Row Filtering Version 1.3Urgh – forgive me – I did not activate the responsive plugin!
But I do have a problem with this
I don’t want it to scroll
Is it possible to switch the scroll off and show the full contents of the table over several lines?
see hereHi,
we could turn off the scrolling and show the content in multiple lines, but unfortunately, this will mean that the row heights have to be adjusted manually 🙁
You could e.g. use this “Custom CSS”:
.tablepress-id-152.tablepress-responsive-all tbody { overflow: visible; } .tablepress-id-152.tablepress-responsive-all thead th, .tablepress-id-152.tablepress-responsive-all tbody td { white-space: normal; line-height: normal; height: 68px; }Regards,
TobiasNot so useful – have a look!
At the bottom of the page I have created a new table 153 which I can populate from an external file using the filter and it works. The only bit I cannot do is send the “key” to the filter
Is it possible for you to address that problem, because it seems to me an easier solution then using your additional plugins and having to transpose the tables and craft CSS to cater for different row heightsThis is the code
//***Custom TablePress table 153**/ add_filter( 'tablepress_cell_content', 'table153', 10, 4 ); function table153( $tablepress_cell_content, $table_id, $row_number, $column_number ) { if ($table_id!=153) { return $tablepress_cell_content; } $key="'Trippitt's Crested'"; $title="Cultivar name:"; $header= "Header"; $end="End"; $dir = "CultivarList.csv"; $delims = ",%#,"; $fp = fopen('https://ebps.org.uk/php/CultivarList.csv', "r") or die ("could not open file"); $y=0; while (!feof($fp)) { $line = fgets($fp, 1024); $Column1 = strtok($line, $delims); $Column2 = strtok($delims); $Column2=trim($Column2); if ($Column1 == $header){continue;} if ($Column1 == $title) { if ($Column2==$key) { $y=1; } } if ($y) { if ($Column1 == $end){break;} if ($column_number==1 and $row_number==$y) { $tablepress_cell_content =$Column1; return $tablepress_cell_content; } if ($column_number==2 and $row_number==$y) { $tablepress_cell_content =$Column2; return $tablepress_cell_content; } $y++; } } }Hi,
the row height CSS is only necessary because of how the
flipmode works.I’m not sure that your approach of opening and parsing a CSV (with an HTTP request!) for every table cell is a good idea.
How about we try to find a different solution for flipping? We don’t really have to do it in CSS, you could use a filter hook (like
tablepress_table_render_data) for that as well, and then flip the table/array in PHP. With that, you would get the data printed as a column (without having to use theflipmode or other CSS), while maintaining the data would be done in rows.Regards,
TobiasThe trouble with me is that I don’t really understand the implications of what I am doing
You would have to help me a bit more to understand what you mean in your third paragraph
I found the code on Github but it is too advanced for me to understand
By the way I am 66 years old, entirely self taught…Hi Andrew,
okay, I looked into this a bit and found this neat way:
add_filter( 'tablepress_table_render_data', 'tablepress_transpose_table', 10, 3 ); function tablepress_transpose_table( $table, $orig_table, $render_options ) { if ( '153' !== $table_id ) { return $table; } // Transpose the data array. array_unshift( $table['data'], null ); $table['data'] = call_user_func_array( 'array_map', $table['data'] ); return $table; }This PHP code will flip table 153 in PHP, so that you won’t have to use the
flipmode of the Responsive Tables Extension, nor any CSS for row heights.Regards,
TobiasI put this code in functions.php
I changed 153 to 152 (153 was an empty table)
But it does not seem to work
Have I misunderstood something or is it a cacheing problem?Hi,
this could indeed be a caching problem, as the function will only be called again once the cached tables are refreshed (every 24 hours).
You could force that by simply making and reversing a dummy change to the table and saving that. This will also flush the cache.Regards,
TobiasYou can see, under “Cultivar Group” I inserted “Change to flush the cache” but to no avail
Hi,
ah, small mistake in the code…
Please replaceif ( '152' !== $table_id ) {with
if ( '152' !== $table['id'] ) {Regards,
TobiasYeeeees!
Thank you as ever, most excellent support
If my people like this I will see if I can donate to you, wee have done it beforeOne more tiny thing – the first line (heading line?) is upper-case, bold – can we remove that to make it look like the rest of the table?
(see table 145 above for styling)Hi,
thanks for wanting to donate, I really appreciate it!
Now, for that heading row: We’ll need to get a bit creative here, so that we still get the data of the header row, but not its styling.
Can you try this modified Shortcode, please (with FILTER being your filter term)?[table id=152 filter="FILTER||Cultivar Name" table_head=false first_column_th=true /](The extra parameters will make the first column the header, while the extra “Cultivar Name” in the filter will cause the first row still being displayed, even though it’s no longer the header row.)
Regards,
Tobias
The topic ‘Dynamic content’ is closed to new replies.