I think there is some mistake in tutorial
If I use the basic model
<?php
class CommentPage extends Kirby\Cms\Page
{
public function writeContent(array $data, string|null $languageCode = null): bool
{
unset($data['title']);
if ($comment = Db::first('comments', '*', ['slug' => $this->slug()])) {
return Db::update('comments', $data, ['slug' => $this->slug()]);
}
$data['slug'] = $this->slug();
return Db::insert('comments', $data);
}
public function delete(bool $force = false): bool
{
return Db::delete('comments', ['slug' => $this->slug()]);
}
public function title(): Kirby\Content\Field
{
return $this->text()->excerpt(100)->or('New comment');
}
}
The I have ability to add new comment from panel
But if I use this modification
<?php
class CommentPage extends Kirby\Cms\Page
{
public function changeSlug(string $slug, string|null $languageCode = null): static
{
// always sanitize the slug
$slug = Str::slug($slug);
$data['slug'] = $slug;
if ($comment = Db::first('comments', '*', ['slug' => $this->slug()])) {
Db::update('comments', $data, ['slug' => $this->slug()]);
}
return $this;
}
protected function changeStatusToDraft(): static
{
$data['status'] = 'null';
if ($comment = Db::first('comments', '*', ['slug' => $this->slug()])) {
Db::update('comments', $data, ['slug' => $this->slug()]);
}
return $this;
}
protected function changeStatusToListed(int|null $position = null): static
{
// create a sorting number for the page
$num = $this->createNum($position);
// don't sort if not necessary
if ($this->status() === 'listed' && $num === $this->num()) {
return $this;
}
$data['status'] = 'listed';
if ($comment = Db::first('comments', '*', ['slug' => $this->slug()])) {
Db::update('comments', $data, ['slug' => $this->slug()]);
}
if ($this->blueprint()->num() === 'default') {
$this->resortSiblingsAfterListing($num);
}
return $this;
}
protected function changeStatusToUnlisted(): static
{
if ($this->status() === 'unlisted') {
return $this;
}
$data['status'] = 'unlisted';
if ($comment = Db::first('comments', '*', ['slug' => $this->slug()])) {
Db::update('comments', $data, ['slug' => $this->slug()]);
}
$this->resortSiblingsAfterUnlisting();
return $this;
}
public function changeTitle(string $title, string|null $languageCode = null): static
{
$data['title'] = $title;
if ($comment = Db::first('comments', '*', ['slug' => $this->slug()])) {
Db::update('comments', $data, ['slug' => $this->slug()]);
}
return $this;
}
public function delete(bool $force = false): bool
{
return Db::delete('comments', ['slug' => $this->slug()]);
}
public function isDraft(): bool
{
return in_array($this->content()->status(), ['listed', 'unlisted']) === false;
}
public function writeContent(array $data, string|null $languageCode = null): bool
{
unset($data['title']);
if ($comment = Db::first('comments', '*', ['slug' => $this->slug()])) {
return Db::update('comments', $data, ['slug' => $this->slug()]);
} else {
$data['slug'] = $this->slug();
return Db::insert('comments', $data);
}
}
}
I having error cannot read properties of undefined (reading JSON) in moment when the page is creating
Any suggestions why it could be happened?