c# convert pdf to image itextsharp : Add fillable fields to pdf online SDK control API wpf web page html sharepoint 05-welling-php-mysql-web79-part130

757
Viewing the Tree of Articles
Figure 31.3 The database holds the tree structure in a flattened 
relational form.
As you can see in the figure,the parent field for each article in the database holds the
postid
of the article above it in the tree.The parent article is the article that is being
replied to.
You can also see that the root node,
postid 1
,has no parent.All new topics of dis-
cussion will be in this position.For articles of this type,you store their parent as a 0
(zero) in the database.
Viewing the Tree of Articles
Next, you need a way of getting information out of the database and representing it
back in the tree structure.You do this with the main page,
index.php
.For the purposes
of this explanation, we input some sample posts via the article posting scripts
new_post.php
and 
store_new_post.php
.We look at them in the next section.
We cover the article list first because it is the backbone of the site.After this,every-
thing else will be easy.
Figure 31.4 shows the initial view of the articles in the site that a user would see.
This figure shows all the initiating articles. None of them are replies;each one is the
first article on a particular topic.
In this case,you have a number of options.The menu bar lets you add a new post and
expand or collapse your view of the articles.
To understand what these options mean,look at the posts.Some of them have plus
symbols next to them.This means that these articles have been replied to.To see the
replies to a particular article, you can click the plus symbol.The result of clicking one of
these symbols is shown in Figure 31.5.
Database representation
postid: 1
parent: 0
postid: 2
parent: 1
postid: 3
parent: 1
postid: 4
parent: 2
postid: 5
parent: 2
Tree representation
postid: 1
postid: 2
postid: 3
postid: 4
postid: 5
Add fillable fields to pdf online - C# PDF Field Edit Library: insert, delete, update pdf form field in C#.net, ASP.NET, MVC, Ajax, WPF
Online C# Tutorial to Insert, Delete and Update Fields in PDF Document
android edit pdf forms; change font size pdf form
Add fillable fields to pdf online - VB.NET PDF Field Edit library: insert, delete, update pdf form field in vb.net, ASP.NET, MVC, Ajax, WPF
How to Insert, Delete and Update Fields in PDF Document with VB.NET Demo Code
change font pdf form; add form fields to pdf without acrobat
758
Chapter 31 Building Web Forums
Figure 31.4 The initial view of the article list shows the articles in 
“collapsed”form.
Figure 31.5 The thread of discussion about persistence has been expanded.
As you can see, clicking the plus symbol displays the replies to that first article.The plus
symbol then turns into a minus symbol.If you click this symbol,all the articles in this
thread will be collapsed,returning you to the initial view.
C# Create PDF Library SDK to convert PDF from other file formats
Create fillable PDF document with fields. creating a PDF document in C#.NET using this PDF document creating toolkit, if you need to add some text and
change font in pdf form; change tab order in pdf form
VB.NET Create PDF from Word Library to convert docx, doc to PDF in
to PDF; VB.NET Form: extract value from fields; Highlight Text. Add Text. Add Text Box. Drawing Markups. PDF Convert multiple pages Word to fillable and editable
add text field to pdf acrobat; pdf fillable form creator
759
Viewing the Tree of Articles
You might also notice that one of the replies in Figure 31.5 has a plus symbol next to
it.This means that there are replies to this reply.The level of replies can continue to an
arbitrary depth,and you can view each reply set by clicking on the appropriate plus
symbol.
The two menu bar options Expand and Collapse expand all possible threads and col-
lapse all possible threads,respectively.The result of clicking the Expand button is shown
in Figure 31.6.
Figure 31.6 All the threads have now been expanded.
If you look closely at Figures 31.5 and 31.6, you can see that some parameters are passed
back to 
index.php
in the command line. In Figure 31.5,the URL looks as follows:
http://localhost/phpmysql3e/chapter31/index.php?expand=10#10
The script reads this line as “Expand the item with 
postid
10.”The 
#
is just an HTML
anchor that scrolls the page down to the part that has just been expanded.
In Figure 31.6,the URL reads
http://localhost/phpmysql3e/chapter31/index.php?expand=all
Clicking the Expand button passes the parameter
expand
with the value 
all
.
Expanding and Collapsing
To see how to create the article view,look at the
index.php
script,shown in Listing 31.2.
VB.NET Create PDF from PowerPoint Library to convert pptx, ppt to
Add Password to PDF; VB.NET Form: extract value from fields; Convert multiple pages PowerPoint to fillable and editable PDF documents. Add necessary references:
create pdf forms; adding a text field to a pdf
VB.NET Create PDF from Excel Library to convert xlsx, xls to PDF
Add Password to PDF; VB.NET Form: extract value from fields; Create fillable and editable PDF documents from Excel in Visual Basic .NET Add necessary references:
add picture to pdf form; add jpg to pdf form
760
Chapter 31 Building Web Forums
Listing 31.2 index.php—Script to Create the Article View on the Main Page of the
Application
<?php
include (‘include_fns.php’);
session_start();
// check if we have created our session variable
if(!isset($_SESSION[‘expanded’]))
{
$_SESSION[‘expanded’] = array();
}
// check if an expand button was pressed
// expand might equal ‘all’ or a postid or not be set
if(isset($_GET[‘expand’]))
{
if($_GET[‘expand’] == ‘all’)
expand_all($_SESSION[‘expanded’]);
else
$_SESSION[‘expanded’][$_GET[‘expand’]] = true;
}
// check if a collapse button was pressed
// collapse might equal all or a postid or not be set
if(isset($_GET[‘collapse’]))
{
if($_GET[‘collapse’]==’all’)
$_SESSION[‘expanded’] = array();
else
unset($_SESSION[‘expanded’][$_GET[‘collapse’]]);
}
do_html_header(‘Discussion Posts’);
display_index_toolbar();
// display the tree view of conversations
display_tree($_SESSION[‘expanded’]);
do_html_footer();
?>
VB.NET Create PDF Library SDK to convert PDF from other file
Create fillable PDF document with fields in Visual Basic .NET application. Add necessary references: RasterEdge.Imaging.Basic.dll.
change text size pdf form; add form fields to pdf online
C# PDF Text Box Edit Library: add, delete, update PDF text box in
PDF file online in ASP.NET. Support to use C# source code to add text box to specified PDF position in C#.NET framework. Able to create a fillable and editable
changing font size in pdf form field; change font size in fillable pdf form
761
Viewing the Tree of Articles
This script uses the following three variables to do its job:
n
The session variable 
expanded
,which keeps track of which threads are expanded.
This variable can be maintained from view to view,so you can have multiple
threads expanded.The 
expanded
variable is an associative array that contains the
postid
of articles that will have their replies expanded.
n
The parameter 
expand
,which tells the script which new threads to expand.
n
The parameter 
collapse
,which tells the script which threads to collapse.
When you click a plus or minus symbol or the Expand or Collapse button,this action
recalls the 
index.php
script with new parameters for 
expand
or 
collapse
.You use
expanded
from page to page to track which threads should be expanded in any given view.
The 
index.php
script begins by starting a session and adding the 
expanded 
variable
as a session variable if this has not already been done.After that,the script checks
whether it has been passed an 
expand
or 
collapse
parameter and modifies the 
expanded
array accordingly. Look at the code for the 
expand
parameter:
if(isset($_GET[‘expand’]))
{
if($_GET[‘expand’] == ‘all’)
expand_all($_SESSION[‘expanded’]);
else
$_SESSION[‘expanded’][$_GET[‘expand’]] = true;
}
If you click on the Expand button,the function 
expand_all()
is called to add all the
threads that have replies into the 
expanded
array.(We look at this in a moment.)
If you try to expand a particular thread,you will be passed a 
postid
via 
expand
.You
therefore add a new entry to the 
expanded
array to reflect this.
The 
expand_all()
function is shown in Listing 31.3.
Listing 31.3 expand_all() Function from discussion_fns.php—Processes the
$expanded Array to Expand All the Threads in the Forum
function expand_all(&$expanded)
{
// mark all threads with children as to be shown expanded
$conn = db_connect();
$query = ‘select postid from header where children = 1’;
$result = $conn->query($query);
$num = $result->num_rows;
for($i = 0; $i<$num; $i++)
{
$this_row = $result->fetch_row();
$expanded[$this_row[0]]=true;
}
}
C# Create PDF from Excel Library to convert xlsx, xls to PDF in C#
Create fillable and editable PDF documents from Excel in both .NET WinForms and ASP C# Demo Code: Convert Excel to PDF in Visual C# .NET Add necessary references
cannot save pdf form in reader; adding images to pdf forms
C# Create PDF from PowerPoint Library to convert pptx, ppt to PDF
Convert multiple pages PowerPoint to fillable and editable PDF documents. C#.NET Demo Code: Convert PowerPoint to PDF in C#.NET Add necessary references:
can reader edit pdf forms; pdf create fillable form
762
Chapter 31 Building Web Forums
This function runs a database query to work out which of the threads in the forum have
replies,as follows:
select postid from header where children = 1
Each of the articles returned is then added to the 
expanded
array.You run this query to
save time later.You could simply add all articles to the expanded list, but it would be
wasteful to try processing replies that do not exist.
Collapsing the articles works in the opposite way, as follows:
if(isset($_GET[‘collapse’]))
{
if($_GET[‘collapse’]==’all’)
$_SESSION[‘expanded’] = array();
else
unset($_SESSION[‘expanded’][$_GET[‘collapse’]]);
}
You can remove items from the 
expanded
array by unsetting them.You remove the thread
that is to be collapsed or unset the entire array if the entire page is to be collapsed.
All this is preprocessing, so you know which articles should be displayed and which
should not.The key part of the script is the call to 
display_tree($_SESSION
[‘expanded’]);
which actually generates the tree of displayed articles.
Displaying the Articles
Let’s look at the
display_tree()
function,shown in Listing 31.4.
Listing 31.4 display_tree() Function from output_fns.php—Creates the Root
Node of the Tree Structure
function display_tree($expanded, $row = 0, $start = 0)
{
// display the tree view of conversations
global $table_width;
echo “<table width = ‘$table_width’>”;
// see if we are displaying the whole list or a sublist
if($start>0)
$sublist = true;
else
$sublist = false;
// construct tree structure to represent conversation summary
$tree = new treenode($start, ‘’, ‘’, ‘’, 1, true, -1, $expanded, $sublist);
C# Create PDF from Word Library to convert docx, doc to PDF in C#.
Convert multiple pages Word to fillable and editable PDF documents in both C#.NET Sample Code: Convert Word to PDF in C#.NET Project. Add necessary references:
pdf form save with reader; adding text fields to pdf acrobat
763
Viewing the Tree of Articles
// tell tree to display itself
$tree->display($row, $sublist);
echo ‘</table>’;
}
The main role of the
display_tree()
function is to create the root node of the tree
structure.You use it to display the whole index and to create subtrees of replies on the
view_post.php
page.As you can see, it takes three parameters.The first,
$expanded
,is
the list of article 
postid
s to display in an expanded fashion.The second,
$row
,is an indi-
cator of the row number that will be used to work out the alternating colors of the rows
in the list.
The third parameter,
$start
,tells the function where to start displaying articles.This
is the 
postid
of the root node for the tree to be created and displayed.If you are dis-
playing the whole thing,as you are on the main page,this will be 0 (zero), meaning dis-
play all the articles with no parent.If this parameter is 0,you set 
$sublist
to 
false
and
display the whole tree.
If the parameter is greater than 0,you use it as the root node of the tree to display, set
$sublist
to 
true
,and build and display only part of the tree.(You use sublists in the
view_post.php
script.)
The most important task this function performs is instantiating an instance of the
treenode
class that represents the root of the tree.This is not actually an article,but it
acts as the parent of all the first-level articles, which have no parent.After the tree has
been constructed,you simply call its display function to actually display the list of 
articles.
Using the treenode Class
The code for the 
treenode
class is shown in Listing 31.5.(You might find it useful at
this stage to look over Chapter 6,“Object-Oriented PHP,”to remind yourself how class-
es work.)
Listing 31.5 treenode Class from treenode_class.php— The Backbone of the
Application
<?php
// functions for loading, contructing and 
// displaying the tree are in this file 
class treenode
Listing 31.4 Continued
764
Chapter 31 Building Web Forums
// each node in the tree has member variables containing 
// all the data for a post except the body of the message
public $m_postid;
public $m_title;
public $m_poster;
public $m_posted;
public $m_children;
public $m_childlist;
public $m_depth;
public function __construct($postid, $title, $poster, $posted, $children,
$expand, $depth, $expanded, $sublist)
// the constructor sets up the member variables, but more 
// importantly recursively creates lower parts of the tree
$this->m_postid = $postid;
$this->m_title = $title;
$this->m_poster = $poster;
$this->m_posted = $posted;
$this->m_children =$children;
$this->m_childlist = array();
$this->m_depth = $depth;
// we only care what is below this node if it 
// has children and is marked to be expanded
// sublists are always expanded
if(($sublist||$expand) && $children)
{
$conn = db_connect();
$query = “select * from header where parent = $postid order by posted”;
$result = $conn->query($query);
for ($count=0; $row = @$result->fetch_assoc(); $count++)
{
if($sublist||$expanded[ $row[‘postid’] ] == true)
$expand = true;
else
$expand = false;
$this->m_childlist[$count]= new treenode($row[‘postid’],$row[‘title’],
$row[‘poster’],$row[‘posted’],
$row[‘children’], $expand,
$depth+1, $expanded, $sublist);
}
}
 
Listing 31.5 Continued 
765
Viewing the Tree of Articles
function display($row, $sublist = false)
{
// as this is an object, it is responsible for displaying itself
// $row tells us what row of the display we are up to 
// so we know what color it should be
// $sublist tells us whether we are on the main page
// or the message page.  Message pages should have 
// $sublist = true.  
// On a sublist, all messages are expanded and there are
// no “+” or “-” symbols.
// if this is the empty root node skip displaying
if($this->m_depth > -1)  
{
//color alternate rows
echo ‘<tr><td bgcolor = ‘;
if ($row%2) 
echo “‘#cccccc’>”;
else
echo “‘#ffffff’>”;
// indent replies to the depth of nesting
for($i = 0; $i < $this->m_depth; $i++)
{
echo “<img src = ‘images/spacer.gif’ height = ‘22’
width = ‘22’ alt = ‘’ valign = ‘bottom’ />”;
}
// display + or - or a spacer 
if ( !$sublist && $this->m_children && sizeof($this->m_childlist))
// we’re on the main page, have some children, and they’re expanded
{
// we are expanded - offer button to collapse
echo “<a href = ‘index.php?collapse=”.
$this->m_postid.”#$this->m_postid’
><img src = ‘images/minus.gif’ valign = ‘bottom’ 
height = ‘22’ width = ‘22’ alt = ‘Collapse Thread’ border = ‘0’
/></a>”;
}
Listing 31.5 Continued 
766
Chapter 31 Building Web Forums
else if(!$sublist && $this->m_children)
{
// we are collapsed - offer button to expand
echo “<a href = ‘index.php?expand=”.
$this->m_postid.”#$this->m_postid’><img src = ‘images/plus.gif’
height = ‘22’ width = ‘22’ alt = ‘Expand Thread’ border = ‘0’
/></a>”;
}
else
{
// we have no children, or are in a sublist, do not give button
echo “<img src = ‘images/spacer.gif’ height = ‘22’ width = ‘22’ 
alt = ‘’ valign = ‘bottom’ />”;
}
echo “ <a name = $this->m_postid ><a href = 
‘view_post.php?postid=$this->m_postid’>$this->m_title - 
$this->m_poster - “.reformat_date($this->m_posted).’</a>’;
echo ‘</td></tr>’;
// increment row counter to alternate colors
$row++;
}
// call display on each of this node’s children
// note a node will only have children in its list if expanded
$num_children = sizeof($this->m_childlist);
for($i = 0; $i < $num_children; $i++)
{
$row = $this->m_childlist[$i]->display($row, $sublist);
}
return $row;
}
}
?>
This class contains the functionality that drives the tree view in this application.
One instance of the 
treenode
class contains details about a single posting and links
to all the reply postings of that class.This gives you the following member variables:
Listing 31.5 Continued 
Documents you may be interested
Documents you may be interested