TOC Depth filter function added
Add options to TOC to only show selected depth of titles ; ie pass 1,3 arguments to only show titles depth 1 to titles depth 3 Plus now you can have two+ TOC on your document, each different
This commit is contained in:
parent
c6fc1d4e89
commit
88be3c962e
@ -304,11 +304,13 @@ class Section
|
|||||||
*
|
*
|
||||||
* @param mixed $styleFont
|
* @param mixed $styleFont
|
||||||
* @param mixed $styleTOC
|
* @param mixed $styleTOC
|
||||||
|
* @param int $minDepth
|
||||||
|
* @param int $maxDepth
|
||||||
* @return \PhpOffice\PhpWord\TOC
|
* @return \PhpOffice\PhpWord\TOC
|
||||||
*/
|
*/
|
||||||
public function addTOC($styleFont = null, $styleTOC = null)
|
public function addTOC($styleFont = null, $styleTOC = null, $minDepth = 1, $maxDepth = 9)
|
||||||
{
|
{
|
||||||
$toc = new TOC($styleFont, $styleTOC);
|
$toc = new TOC($styleFont, $styleTOC, $minDepth, $maxDepth);
|
||||||
$this->_elementCollection[] = $toc;
|
$this->_elementCollection[] = $toc;
|
||||||
return $toc;
|
return $toc;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -67,6 +67,19 @@ class TOC
|
|||||||
*/
|
*/
|
||||||
private static $_bookmarkId = 0;
|
private static $_bookmarkId = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Min title depth to show
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
private $_minDepth = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Max title depth to show
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
private $_maxDepth = 9;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new Table-of-Contents Element
|
* Create a new Table-of-Contents Element
|
||||||
@ -74,7 +87,7 @@ class TOC
|
|||||||
* @param array $styleFont
|
* @param array $styleFont
|
||||||
* @param array $styleTOC
|
* @param array $styleTOC
|
||||||
*/
|
*/
|
||||||
public function __construct($styleFont = null, $styleTOC = null)
|
public function __construct($styleFont = null, $styleTOC = null, $minDepth = 1, $maxDepth = 9)
|
||||||
{
|
{
|
||||||
self::$_styleTOC = new \PhpOffice\PhpWord\Style\TOC();
|
self::$_styleTOC = new \PhpOffice\PhpWord\Style\TOC();
|
||||||
|
|
||||||
@ -101,6 +114,9 @@ class TOC
|
|||||||
self::$_styleFont = $styleFont;
|
self::$_styleFont = $styleFont;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->_minDepth = $minDepth;
|
||||||
|
$this->_maxDepth = $maxDepth;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -131,9 +147,20 @@ class TOC
|
|||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function getTitles()
|
public function getTitles()
|
||||||
{
|
{
|
||||||
return self::$_titles;
|
$titles = self::$_titles;
|
||||||
|
foreach ($titles as $i=>$title) {
|
||||||
|
if ($this->_minDepth > $title['depth']) {
|
||||||
|
unset($titles[$i]);
|
||||||
|
}
|
||||||
|
if (($this->_maxDepth != 0) && ($this->_maxDepth < $title['depth'])) {
|
||||||
|
unset($titles[$i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$titles = array_merge(array(), $titles);
|
||||||
|
|
||||||
|
return $titles;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -155,4 +182,22 @@ class TOC
|
|||||||
{
|
{
|
||||||
return self::$_styleFont;
|
return self::$_styleFont;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Max Depth
|
||||||
|
*
|
||||||
|
* @return int Max depth of titles
|
||||||
|
*/
|
||||||
|
public function getMaxDepth() {
|
||||||
|
return $this->_maxDepth;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Min Depth
|
||||||
|
*
|
||||||
|
* @return int Min depth of titles
|
||||||
|
*/
|
||||||
|
public function getMinDepth() {
|
||||||
|
return $this->_minDepth;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -112,7 +112,7 @@ class Document extends Base
|
|||||||
} elseif ($element instanceof Object) {
|
} elseif ($element instanceof Object) {
|
||||||
$this->_writeObject($xmlWriter, $element);
|
$this->_writeObject($xmlWriter, $element);
|
||||||
} elseif ($element instanceof TOC) {
|
} elseif ($element instanceof TOC) {
|
||||||
$this->_writeTOC($xmlWriter);
|
$this->_writeTOC($xmlWriter, $element);
|
||||||
} elseif ($element instanceof Footnote) {
|
} elseif ($element instanceof Footnote) {
|
||||||
$this->_writeFootnoteReference($xmlWriter, $element);
|
$this->_writeFootnoteReference($xmlWriter, $element);
|
||||||
}
|
}
|
||||||
@ -417,16 +417,20 @@ class Document extends Base
|
|||||||
* Write TOC element
|
* Write TOC element
|
||||||
*
|
*
|
||||||
* @param PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter
|
* @param PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter
|
||||||
|
* @param PhpOffice\PhpWord\TOC $toc
|
||||||
*/
|
*/
|
||||||
private function _writeTOC(XMLWriter $xmlWriter)
|
private function _writeTOC(XMLWriter $xmlWriter, TOC $toc)
|
||||||
{
|
{
|
||||||
$titles = TOC::getTitles();
|
$titles = $toc->getTitles();
|
||||||
$styleFont = TOC::getStyleFont();
|
$styleFont = $toc->getStyleFont();
|
||||||
|
|
||||||
$styleTOC = TOC::getStyleTOC();
|
$styleTOC = $toc->getStyleTOC();
|
||||||
$fIndent = $styleTOC->getIndent();
|
$fIndent = $styleTOC->getIndent();
|
||||||
$tabLeader = $styleTOC->getTabLeader();
|
$tabLeader = $styleTOC->getTabLeader();
|
||||||
$tabPos = $styleTOC->getTabPos();
|
$tabPos = $styleTOC->getTabPos();
|
||||||
|
|
||||||
|
$maxDepth = $toc->getMaxDepth();
|
||||||
|
$minDepth = $toc->getMinDepth();
|
||||||
|
|
||||||
$isObject = ($styleFont instanceof Font) ? true : false;
|
$isObject = ($styleFont instanceof Font) ? true : false;
|
||||||
|
|
||||||
@ -479,7 +483,7 @@ class Document extends Base
|
|||||||
$xmlWriter->startElement('w:r');
|
$xmlWriter->startElement('w:r');
|
||||||
$xmlWriter->startElement('w:instrText');
|
$xmlWriter->startElement('w:instrText');
|
||||||
$xmlWriter->writeAttribute('xml:space', 'preserve');
|
$xmlWriter->writeAttribute('xml:space', 'preserve');
|
||||||
$xmlWriter->writeRaw('TOC \o "1-9" \h \z \u');
|
$xmlWriter->writeRaw('TOC \o "'.$minDepth.'-'.$maxDepth.'" \h \z \u');
|
||||||
$xmlWriter->endElement();
|
$xmlWriter->endElement();
|
||||||
$xmlWriter->endElement();
|
$xmlWriter->endElement();
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user