本文整理汇总了PHP中Title::makeTitle方法的典型用法代码示例。如果您正苦于以下问题:PHP Title::makeTitle方法的具体用法?PHP Title::makeTitle怎么用?PHP Title::makeTitle使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Title
的用法示例。
在下文中一共展示了Title::makeTitle方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: doTagRow
function doTagRow($tag, $hitcount)
{
static $doneTags = array();
if (in_array($tag, $doneTags)) {
return '';
}
$newRow = '';
$newRow .= Xml::tags('td', null, Xml::element('code', null, $tag));
$disp = ChangeTags::tagDescription($tag);
$disp .= ' ';
$editLink = Linker::link(Title::makeTitle(NS_MEDIAWIKI, "Tag-{$tag}"), $this->msg('tags-edit')->escaped());
$disp .= $this->msg('parentheses')->rawParams($editLink)->escaped();
$newRow .= Xml::tags('td', null, $disp);
$msg = $this->msg("tag-{$tag}-description");
$desc = !$msg->exists() ? '' : $msg->parse();
$desc .= ' ';
$editDescLink = Linker::link(Title::makeTitle(NS_MEDIAWIKI, "Tag-{$tag}-description"), $this->msg('tags-edit')->escaped());
$desc .= $this->msg('parentheses')->rawParams($editDescLink)->escaped();
$newRow .= Xml::tags('td', null, $desc);
$hitcount = $this->msg('tags-hitcount')->numParams($hitcount)->escaped();
$hitcount = Linker::link(SpecialPage::getTitleFor('Recentchanges'), $hitcount, array(), array('tagfilter' => $tag));
$newRow .= Xml::tags('td', null, $hitcount);
$doneTags[] = $tag;
return Xml::tags('tr', null, $newRow) . "\n";
}
示例2: formatResult
function formatResult($skin, $result)
{
global $wgUser, $wgContLang;
$fromObj = Title::makeTitle($result->namespace, $result->title);
if (isset($result->rd_title)) {
$toObj = Title::makeTitle($result->rd_namespace, $result->rd_title);
} else {
$blinks = $fromObj->getBrokenLinksFrom();
# TODO: check for redirect, not for links
if ($blinks) {
$toObj = $blinks[0];
} else {
$toObj = false;
}
}
// $toObj may very easily be false if the $result list is cached
if (!is_object($toObj)) {
return '<s>' . $skin->makeLinkObj($fromObj) . '</s>';
}
$from = $skin->makeKnownLinkObj($fromObj, '', 'redirect=no');
$edit = $skin->makeKnownLinkObj($fromObj, wfMsgHtml('brokenredirects-edit'), 'action=edit');
$to = $skin->makeBrokenLinkObj($toObj);
$arr = $wgContLang->getArrow();
$out = "{$from} {$edit}";
if ($wgUser->isAllowed('delete')) {
$delete = $skin->makeKnownLinkObj($fromObj, wfMsgHtml('brokenredirects-delete'), 'action=delete');
$out .= " {$delete}";
}
$out .= " {$arr} {$to}";
return $out;
}
示例3: updateCheckUserData
/**
* Hook function for RecentChange_save
* Saves user data into the cu_changes table
*/
public static function updateCheckUserData(RecentChange $rc)
{
global $wgRequest;
// Extract params
extract($rc->mAttribs);
// Get IP
$ip = wfGetIP();
// Get XFF header
$xff = $wgRequest->getHeader('X-Forwarded-For');
list($xff_ip, $isSquidOnly) = IP::getClientIPfromXFF($xff);
// Get agent
$agent = $wgRequest->getHeader('User-Agent');
// Store the log action text for log events
// $rc_comment should just be the log_comment
// BC: check if log_type and log_action exists
// If not, then $rc_comment is the actiontext and comment
if (isset($rc_log_type) && $rc_type == RC_LOG) {
$target = Title::makeTitle($rc_namespace, $rc_title);
$context = RequestContext::newExtraneousContext($target);
$formatter = LogFormatter::newFromRow($rc->mAttribs);
$formatter->setContext($context);
$actionText = $formatter->getPlainActionText();
} else {
$actionText = '';
}
$dbw = wfGetDB(DB_MASTER);
$cuc_id = $dbw->nextSequenceValue('cu_changes_cu_id_seq');
$rcRow = array('cuc_id' => $cuc_id, 'cuc_namespace' => $rc_namespace, 'cuc_title' => $rc_title, 'cuc_minor' => $rc_minor, 'cuc_user' => $rc_user, 'cuc_user_text' => $rc_user_text, 'cuc_actiontext' => $actionText, 'cuc_comment' => $rc_comment, 'cuc_this_oldid' => $rc_this_oldid, 'cuc_last_oldid' => $rc_last_oldid, 'cuc_type' => $rc_type, 'cuc_timestamp' => $rc_timestamp, 'cuc_ip' => IP::sanitizeIP($ip), 'cuc_ip_hex' => $ip ? IP::toHex($ip) : null, 'cuc_xff' => !$isSquidOnly ? $xff : '', 'cuc_xff_hex' => $xff_ip && !$isSquidOnly ? IP::toHex($xff_ip) : null, 'cuc_agent' => $agent);
# On PG, MW unsets cur_id due to schema incompatibilites. So it may not be set!
if (isset($rc_cur_id)) {
$rcRow['cuc_page_id'] = $rc_cur_id;
}
$dbw->insert('cu_changes', $rcRow, __METHOD__);
return true;
}
示例4: execute
public function execute($params = false)
{
$sEditLinkText = wfMessage('bs-widget-edit')->text();
$oTitle = Title::makeTitle(NS_USER, RequestContext::getMain()->getUser()->getName() . '/Widgetbar');
$sEditLink = Linker::link($oTitle, Html::rawElement('span', array(), $sEditLinkText), array('id' => 'bs-widgetbar-edit', 'class' => 'icon-pencil clearfix'), array('action' => 'edit', 'preload' => ''));
$aOut = array();
$aOut[] = '<div id="bs-widget-container" >';
$aOut[] = ' <div class="icon-plus" id="bs-widget-tab" title="' . wfMessage('bs-widget-container-tooltip')->text() . '" tabindex="100">[+/-]</div>';
$aOut[] = ' <div id="bs-flyout">';
$aOut[] = ' <h4 id="bs-flyout-heading">' . wfMessage('bs-widget-flyout-heading')->text() . '</h4>';
$aOut[] = ' <div id="bs-flyout-content">';
$aOut[] = ' <div id="bs-flyout-content-widgets">';
$aOut[] = ' <h4 id="bs-flyout-content-widgets-header">' . wfMessage("bs-widget-flyout-heading")->plain() . $sEditLink . '</h4>';
foreach ($this->_mWidgets as $oWidgetView) {
if ($oWidgetView instanceof ViewWidget) {
$aOut[] = $oWidgetView->execute();
} else {
wfDebug(__METHOD__ . ': Invalid widget.');
}
}
$aOut[] = ' </div>';
$aOut[] = ' </div>';
$aOut[] = ' </div>';
$aOut[] = '</div>';
return implode("\n", $aOut);
}
示例5: initialize
public function initialize()
{
$dbr = wfGetDB(DB_MASTER);
$res = $dbr->select('categorylinks', array('cl_to', 'COUNT(*) AS count'), array(), __METHOD__, array('GROUP BY' => 'cl_to', 'ORDER BY' => 'count DESC', 'LIMIT' => $this->limit));
wfSuppressWarnings();
// prevent PHP from bitching about strtotime()
foreach ($res as $row) {
$tag_name = Title::makeTitle(NS_CATEGORY, $row->cl_to);
$tag_text = $tag_name->getText();
if (strtotime($tag_text) == '') {
// don't want dates to show up
if ($row->count > $this->tags_highest_count) {
$this->tags_highest_count = $row->count;
}
$this->tags[$tag_text] = array('count' => $row->count);
}
}
wfRestoreWarnings();
// sort tag array by key (tag name)
if ($this->tags_highest_count == 0) {
return;
}
ksort($this->tags);
/* and what if we have _1_ category? like on a new wiki with nteen articles, mhm? */
if ($this->tags_highest_count == 1) {
$coef = $this->tags_max_pts - $this->tags_min_pts;
} else {
$coef = ($this->tags_max_pts - $this->tags_min_pts) / (($this->tags_highest_count - 1) * 2);
}
foreach ($this->tags as $tag => $att) {
$this->tags[$tag]['size'] = $this->tags_min_pts + ($this->tags[$tag]['count'] - 1) * $coef;
}
}
示例6: formatResult
function formatResult($skin, $result)
{
global $wgContLang;
$fname = 'DoubleRedirectsPage::formatResult';
$titleA = Title::makeTitle($result->namespace, $result->title);
if ($result && !isset($result->nsb)) {
$dbr =& wfGetDB(DB_SLAVE);
$sql = $this->getSQLText($dbr, $result->namespace, $result->title);
$res = $dbr->query($sql, $fname);
if ($res) {
$result = $dbr->fetchObject($res);
$dbr->freeResult($res);
}
}
if (!$result) {
return '';
}
$titleB = Title::makeTitle($result->nsb, $result->tb);
$titleC = Title::makeTitle($result->nsc, $result->tc);
$linkA = $skin->makeKnownLinkObj($titleA, '', 'redirect=no');
$edit = $skin->makeBrokenLinkObj($titleA, "(" . wfMsg("qbedit") . ")", 'redirect=no');
$linkB = $skin->makeKnownLinkObj($titleB, '', 'redirect=no');
$linkC = $skin->makeKnownLinkObj($titleC);
$arr = $wgContLang->isRTL() ? '←' : '→';
return "{$linkA} {$edit} {$arr} {$linkB} {$arr} {$linkC}";
}
示例7: execute
public function execute()
{
global $wgUser;
$this->output("Checking existence of old default messages...");
$dbr = $this->getDB(DB_REPLICA);
$res = $dbr->select(['page', 'revision'], ['page_namespace', 'page_title'], ['page_namespace' => NS_MEDIAWIKI, 'page_latest=rev_id', 'rev_user_text' => 'MediaWiki default']);
if ($dbr->numRows($res) == 0) {
# No more messages left
$this->output("done.\n");
return;
}
# Deletions will be made by $user temporarly added to the bot group
# in order to hide it in RecentChanges.
$user = User::newFromName('MediaWiki default');
if (!$user) {
$this->error("Invalid username", true);
}
$user->addGroup('bot');
$wgUser = $user;
# Handle deletion
$this->output("\n...deleting old default messages (this may take a long time!)...", 'msg');
$dbw = $this->getDB(DB_MASTER);
foreach ($res as $row) {
wfWaitForSlaves();
$dbw->ping();
$title = Title::makeTitle($row->page_namespace, $row->page_title);
$page = WikiPage::factory($title);
$error = '';
// Passed by ref
// FIXME: Deletion failures should be reported, not silently ignored.
$page->doDeleteArticle('No longer required', false, 0, true, $error, $user);
}
$this->output("done!\n", 'msg');
}
示例8: formatResult
/**
* @param Skin $skin
* @param object $result Result row
* @return string
*/
function formatResult($skin, $result)
{
global $wgContLang;
$nt = Title::makeTitle($result->namespace, $result->title);
$text = htmlspecialchars($wgContLang->convert($nt->getText()));
if (!$this->isCached()) {
// We can assume the freshest data
$plink = Linker::link($nt, $text, array(), array(), array('broken'));
$nlinks = $this->msg('nmembers')->numParams($result->value)->escaped();
} else {
$plink = Linker::link($nt, $text);
$currentValue = isset($this->currentCategoryCounts[$result->title]) ? $this->currentCategoryCounts[$result->title] : 0;
$cachedValue = intval($result->value);
// T76910
// If the category has been created or emptied since the list was refreshed, strike it
if ($nt->isKnown() || $currentValue === 0) {
$plink = "<del>{$plink}</del>";
}
// Show the current number of category entries if it changed
if ($currentValue !== $cachedValue) {
$nlinks = $this->msg('nmemberschanged')->numParams($cachedValue, $currentValue)->escaped();
} else {
$nlinks = $this->msg('nmembers')->numParams($cachedValue)->escaped();
}
}
return $this->getLanguage()->specialList($plink, $nlinks);
}
示例9: execute
public function execute($subpage)
{
global $wgRequest, $wgUser, $wgOut;
if ($wgUser->isAnon()) {
$this->displayRestrictionError();
return;
}
if ($wgUser->isBlocked()) {
throw new UserBlockedError($this->getUser()->mBlock);
}
/**
* initial output
*/
$this->mTitle = Title::makeTitle(NS_SPECIAL, 'CloakCheck');
$wgOut->setPageTitle(wfMsg('cloakcheck'));
$wgOut->setRobotpolicy('noindex,nofollow');
$wgOut->setArticleRelated(false);
#staff can see other people, users cant
if (!$wgUser->isAllowed('cloakcheck')) {
#user is user, show just button
$this->isChecker = false;
$this->mTarget = $wgUser->getName();
} else {
#user is staff (or otherwise flagged), allow to use full form/subpage
$this->isChecker = true;
$this->mTarget = $wgRequest->getText('username', $subpage);
}
/**
* show form
*/
$this->doForm();
if ($wgRequest->wasPosted()) {
$this->process();
}
}
示例10: formatResult
/**
* @param Skin $skin
* @param object $result Result row
* @return string
*/
function formatResult($skin, $result)
{
$title = Title::makeTitle(NS_TEMPLATE, $result->title);
$pageLink = Linker::linkKnown($title, null, array(), array('redirect' => 'no'));
$wlhLink = Linker::linkKnown(SpecialPage::getTitleFor('Whatlinkshere', $title->getPrefixedText()), $this->msg('unusedtemplateswlh')->escaped());
return $this->getLanguage()->specialList($pageLink, $wlhLink);
}
示例11: doCategoryQuery
function doCategoryQuery()
{
$dbr = wfGetDB(DB_SLAVE, 'category');
if ($this->from != '') {
$pageCondition = 'clms_sortkey >= ' . $dbr->addQuotes($this->from);
$this->flip = false;
} elseif ($this->until != '') {
$pageCondition = 'clms_sortkey < ' . $dbr->addQuotes($this->until);
$this->flip = true;
} else {
$pageCondition = '1 = 1';
$this->flip = false;
}
$res = $dbr->select(array('page', 'categorylinks_multisort', 'category'), array('page_title', 'page_namespace', 'page_len', 'page_is_redirect', 'clms_sortkey', 'cat_id', 'cat_title', 'cat_subcats', 'cat_pages', 'cat_files'), array($pageCondition, 'clms_to' => $this->title->getDBkey(), 'clms_sortkey_name' => $this->sortkeyName), __METHOD__, array('ORDER BY' => $this->flip ? 'clms_sortkey DESC' : 'clms_sortkey', 'USE INDEX' => array('categorylinks_multisort' => 'clms_sortkey'), 'LIMIT' => $this->limit + 1), array('categorylinks_multisort' => array('INNER JOIN', 'clms_from = page_id'), 'category' => array('LEFT JOIN', 'cat_title = page_title AND page_namespace = ' . NS_CATEGORY)));
$count = 0;
$this->nextPage = null;
while ($x = $dbr->fetchObject($res)) {
if (++$count > $this->limit) {
// We've reached the one extra which shows that there are
// additional pages to be had. Stop here...
$this->nextPage = $x->clms_sortkey;
break;
}
$title = Title::makeTitle($x->page_namespace, $x->page_title);
if ($title->getNamespace() == NS_CATEGORY) {
$cat = Category::newFromRow($x, $title);
$this->addSubcategoryObject($cat, $x->clms_sortkey, $x->page_len);
} elseif ($this->showGallery && $title->getNamespace() == NS_FILE) {
$this->addImage($title, $x->clms_sortkey, $x->page_len, $x->page_is_redirect);
} else {
$this->addPage($title, $x->clms_sortkey, $x->page_len, $x->page_is_redirect);
}
}
}
示例12: execute
/**
* Show the special page
*
* @param $params Mixed: parameter(s) passed to the page or null
*/
public function execute($params)
{
$out = $this->getOutput();
$user = $this->getUser();
// Set the page title, robot policies, etc.
$this->setHeaders();
/**
* Redirect anonymous users to the login page
* It will automatically return them to the ViewRelationshipRequests page
*/
if (!$user->isLoggedIn()) {
$out->setPageTitle($this->msg('ur-error-page-title')->plain());
$login = SpecialPage::getTitleFor('Userlogin');
$out->redirect($login->getFullURL('returnto=Special:ViewRelationshipRequests'));
return false;
}
// Add CSS & JS
$out->addModuleStyles('ext.socialprofile.userrelationship.css');
$out->addModules('ext.socialprofile.userrelationship.js');
$rel = new UserRelationship($user->getName());
$friend_request_count = $rel->getOpenRequestCount($user->getID(), 1);
$foe_request_count = $rel->getOpenRequestCount($user->getID(), 2);
if ($this->getRequest()->wasPosted() && $_SESSION['alreadysubmitted'] == false) {
$_SESSION['alreadysubmitted'] = true;
$rel->addRelationshipRequest($this->user_name_to, $this->relationship_type, $_POST['message']);
$output = '<br /><span class="title">' . $this->msg('ur-already-submitted')->plain() . '</span><br /><br />';
$out->addHTML($output);
} else {
$_SESSION['alreadysubmitted'] = false;
$output = '';
$out->setPageTitle($this->msg('ur-requests-title')->plain());
$requests = $rel->getRequestList(0);
if ($requests) {
foreach ($requests as $request) {
$user_from = Title::makeTitle(NS_USER, $request['user_name_from']);
$avatar = new wAvatar($request['user_id_from'], 'l');
$avatar_img = $avatar->getAvatarURL();
if ($request['type'] == 'Foe') {
$msg = $this->msg('ur-requests-message-foe', htmlspecialchars($user_from->getFullURL()), $request['user_name_from'])->text();
} else {
$msg = $this->msg('ur-requests-message-friend', htmlspecialchars($user_from->getFullURL()), $request['user_name_from'])->text();
}
$message = $out->parse(trim($request['message']), false);
$output .= "<div class=\"relationship-action black-text\" id=\"request_action_{$request['id']}\">\n\t\t\t\t\t \t{$avatar_img}" . $msg;
if ($request['message']) {
$output .= '<div class="relationship-message">' . $message . '</div>';
}
$output .= '<div class="cleared"></div>
<div class="relationship-buttons">
<input type="button" class="site-button" value="' . $this->msg('ur-accept')->plain() . '" data-response="1" />
<input type="button" class="site-button" value="' . $this->msg('ur-reject')->plain() . '" data-response="-1" />
</div>
</div>';
}
} else {
$output = $this->msg('ur-no-requests-message')->parse();
}
$out->addHTML($output);
}
}
示例13: renderKeypage
function renderKeypage($input, $argv, $parser)
{
# $argv is an array containing any arguments passed to the
# extension like <example argument="foo" bar>..
# Put this on the sandbox page: (works in MediaWiki 1.5.5)
# <example argument="foo" argument2="bar">Testing text **example** in between the new tags</example>
$kwline = trim(html_entity_decode($input, ENT_QUOTES, "UTF-8"));
$tok = strtok($kwline, ",;");
$kws = array();
while ($tok !== false) {
$kws[] = strtolower(trim($tok));
$tok = strtok(",;");
}
$kws = array_unique($kws);
// var_dump($kws);
$output = "<span class=\"small\">";
$komma = "";
if (count($kws)) {
foreach ($kws as $kw) {
if (strlen($kw) > 80) {
$kw = substr($kw, 0, 80);
}
$kwu = $kw;
$kwu[0] = strtoupper($kwu[0]);
$output .= sprintf("%s<a href=\"%s\">%s</a>", $komma, Title::makeTitle(NS_SPECIAL, sprintf("Keyword/%s", $kw))->getLocalURL(), $kwu);
$komma = ", ";
}
}
$output .= "</span>\n";
return $output;
}
示例14: getArticleRequestBottom
function getArticleRequestBottom()
{
global $wgTitle, $wgStylePath, $wgScript, $wgScriptPath;
global $wgLang, $wgTitle, $wgRequest;
$s = "";
$li = $wgLang->specialPage("Userlogin");
$lo = $wgLang->specialPage("Userlogout");
$rt = $wgTitle->getPrefixedURL();
if (0 == strcasecmp(urlencode($lo), $rt)) {
$q = "";
} else {
$q = "?returnto={$rt}";
}
$action = $wgRequest->getVal("action");
if ($wgTitle->getNamespace() == NS_ARTICLE_REQUEST && $action == "" && $wgTitle->getArticleID() > 0) {
$s .= "</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t";
$t = Title::makeTitle(NS_MAIN, $wgTitle->getText());
if ($t->getArticleID() > 0) {
$s .= "<td style=\"padding-left: 50px\" colspan=\"2\"><br/><br/>" . wfMsg('answeredtopic', $t->getText(), $t->getFullURL()) . "</a>.";
} else {
$s .= "<td style=\"padding-left: 250px\" colspan=\"2\">\n\t\t\t\t\t\t\t<br/><br/>" . wfMsg('canyouhelp') . "<br/><br/>\n\t\t\t\t\t\t\t<img src=\"{$wgStylePath}/common/images/arrow.jpg\" align=\"middle\"> <a href=\"{$wgScript}?title=" . $wgTitle->getDBKey() . "&action=edit&requested=" . $wgTitle->getDBKey() . "\">" . wfMsg('write-howto') . " " . $wgTitle->getText() . "</a><br/>\n\t\t\t\t<br/><!--<font size=-3>" . wfMsg('requested-topic-removed') . "</font><br/><br/>-->\n\t\t\t\t\t\t\t<img src=\"{$wgStylePath}/common/images/arrow.jpg\" align=\"middle\"> <a href=\"{$wgScriptPath}/" . $wgLang->getNsText(NS_SPECIAL) . ":EmailLink?target=" . $wgTitle->getPrefixedURL() . "&returnto={$rt}\">" . wfMsg('sendthisrequest') . "</a>\n\t\t\t\t\t\t\t<br/><font size=-3> " . wfMsg('knowanexprt') . "</font><br/><br/>\n\t\t\t\t\t\t\t<img src=\"{$wgStylePath}/common/images/arrow.jpg\" align=\"middle\"> <a href=\"/Special:Createpage\">" . wfMsg('writerelated') . "</a> <br/>\n\t\t\t\t\t\t\t<font size=-3> " . wfMsg('topicremains') . "</font><br/><br/>\n\t\t\t\t\t<img src=\"{$wgStylePath}/common/images/arrow.jpg\" align=\"middle\"> <a href=\"{$wgScriptPath}/" . wfMsg('about-wikihow-url') . "\">" . wfMsg('learnmoreaboutwikihow') . "</a> <br/>";
}
$s .= "</td>\n\t\t\t\t</tr>\n\t\t\t\t</table></div>";
}
return $s;
}
示例15: doTagRow
function doTagRow($tag, $hitcount)
{
$user = $this->getUser();
$newRow = '';
$newRow .= Xml::tags('td', null, Xml::element('code', null, $tag));
$disp = ChangeTags::tagDescription($tag);
if ($user->isAllowed('editinterface')) {
$disp .= ' ';
$editLink = Linker::link(Title::makeTitle(NS_MEDIAWIKI, "Tag-{$tag}"), $this->msg('tags-edit')->escaped());
$disp .= $this->msg('parentheses')->rawParams($editLink)->escaped();
}
$newRow .= Xml::tags('td', null, $disp);
$msg = $this->msg("tag-{$tag}-description");
$desc = !$msg->exists() ? '' : $msg->parse();
if ($user->isAllowed('editinterface')) {
$desc .= ' ';
$editDescLink = Linker::link(Title::makeTitle(NS_MEDIAWIKI, "Tag-{$tag}-description"), $this->msg('tags-edit')->escaped());
$desc .= $this->msg('parentheses')->rawParams($editDescLink)->escaped();
}
$newRow .= Xml::tags('td', null, $desc);
$active = isset($this->definedTags[$tag]) ? 'tags-active-yes' : 'tags-active-no';
$active = $this->msg($active)->escaped();
$newRow .= Xml::tags('td', null, $active);
$hitcountLabel = $this->msg('tags-hitcount')->numParams($hitcount)->escaped();
$hitcountLink = Linker::link(SpecialPage::getTitleFor('Recentchanges'), $hitcountLabel, array(), array('tagfilter' => $tag));
// add raw $hitcount for sorting, because tags-hitcount contains numbers and letters
$newRow .= Xml::tags('td', array('data-sort-value' => $hitcount), $hitcountLink);
return Xml::tags('tr', null, $newRow) . "\n";
}