更新2:
关于错误"调用成员函数children()on null",我找到了这些函数。
public function hasChildren()
{
return $this->hasChildNodes();
}
public function children($query = null)
{
$children = array();
if (!$this->hasChildren()) {
return $children;
}
if ($query == null) {
foreach ($this->childNodes as $child) {
if ($child->nodeType == XML_ELEMENT_NODE) {
$children[] = $child;
}
}
return $children;
}
return $this->query(CssSelector::toXPath($query, 'child::'));
}
public function removeChildren()
{
while ($child = $this->firstChild) {
$this->removeChild($child);
}
return $this;
}
#########################################
更新:
我想把密码改成
public function before(...$data): void
{
foreach($data as $item) {
$item = $this->prepareInsert($item);
$this->parentNode->insertBefore($item, $this);
}
}
这看起来很有效,但是我得到了更多这样的错误。有一次我把代码从:
public function prepend($data)
{
$data = $this->prepareInsert($data);
if (isset($data)) {
if ($this->hasChildren()) {
$this->insertBefore($data, $this->firstChild);
} else {
$this->appendChild($data);
}
}
return $this;
}
改为:
public function prepend(...$data): void
{
foreach($data as $item)
{
$item = $this->prepareInsert($item);
if (isset($item)) {
if ($this->hasChildren()) {
$this->insertBefore($item, $this->firstChild);
} else {
$this->appendChild($item);
}
}
}
}
现在,我的页面上显示错误消息:
Call to a member function children() on null
没有其他信息。
我们已经安装了Joomla 3.10.10,并使用BDThemes的模板"Effortless"(我们很久以前通过Envato购买的)。2该模板基于Warp 7框架。3然而,我们的版本已经过时,不能再更新,因为模板在Envato上不再可用。4目前我们仍然使用PHP 7.4,当我们升级到PHP 8.0时,我们得到错误消息:
"致命错误:Warp\Dom\Element::之前的声明($data):void必须与DOMElement::before(... $节点)兼容:在/homepages/13/d238860405/htdocs/homecms_ta/templates/毫不费力的/warp/源代码/warp/Dom/Element.php中的第108行无效"
代码:
public function before($data)
{
$data = $this->prepareInsert($data);
$this->parentNode->insertBefore($data, $this);
return $this;
}
不幸的是,我不知道怎么修。如果能帮上忙,我将不胜感激。
1条答案
按热度按时间njthzxwz1#
Element有一些更新的方法(在IE时代不可用),例如:
很明显,DOMElement PHP的新版本也试图遵循它,所有这些都是可变的,但是主题的旧代码可能假设您只有一个元素要插入。
最简单的解决办法(最小的变化)可能是使用变量参数
...$your_variable_name as $data
,然后在数据周围使用foreach($your_variable_name as $data){...}
。(如果有人曾经使用$element -> before($oneThing) -> before($anotherThing)
,则第二个将失败(因为第一个before
的返回类型是void
,不像$this
的旧返回值,您可以在此之后直接使用->before
)。return $this
可能不会被使用(尽管我不确定)。例如:
(note我不能自己测试,因为我没有你使用的模板的完整代码)