'int', 'body' => 'json', 'comment_count' => 'int', 'likes_count' => 'int', 'featured' => 'bool', 'publish_date' => 'datetime', ]; protected $fillable = [ 'title', 'slug', 'cliffhanger', 'excerpt', 'author_id', 'featured_image', 'editor', 'body', 'post_format', 'comment_count', 'likes_count', 'status', 'featured', 'publish_date', ]; protected $appends = [ //'html_body', ]; public function author() { return $this->belongsTo(Author::class); } public function post_categories() { return $this->hasMany(PostCategory::class); } public function post_category() { return $this->hasOne(PostCategory::class); } public function getHtmlBodyAttribute() { if (! is_empty($this->body)) { if ($this->editor == 'editorjs') { return LaravelEditorJs::render(json_encode($this->body)); } elseif ($this->editor == 'markdown') { //dd($this->body); $html = Markdown::convert($this->body)->getContent(); //dd($html); $html = str_replace('\\n', "\n", $html); $crawler = new Crawler($html); $firstHeaderProcessed = false; $crawler->filter('h1, h2, h3, h4, h5, h6')->each(function (Crawler $node) use (&$firstHeaderProcessed) { $element = $node->getNode(0); // Create a new h3 element $newElement = $element->ownerDocument->createElement('h3'); // Copy attributes from the old header element to the new h3 element foreach ($element->attributes as $attribute) { $newElement->setAttribute($attribute->name, $attribute->value); } // Add the 'fw-bold' class to the new h3 element $existingClasses = $element->getAttribute('class'); $newClass = 'fw-bold'; $updatedClasses = ($existingClasses ? $existingClasses.' ' : '').$newClass; $newElement->setAttribute('class', $updatedClasses); // Move child nodes from the old header element to the new h3 element while ($element->firstChild) { $newElement->appendChild($element->firstChild); } // Replace the old header element with the new h3 element in the DOM $element->parentNode->replaceChild($newElement, $element); // Only for the first header if (! $firstHeaderProcessed) { $firstHeaderProcessed = true; $nextSibling = $newElement->nextSibling; while ($nextSibling) { if ($nextSibling->nodeType === XML_ELEMENT_NODE) { if ($nextSibling->nodeName === 'p' && ($nextSibling->getElementsByTagName('img')->length > 0 || $nextSibling->getElementsByTagName('figure')->length > 0)) { // Remove
if it contains an
$newElement->parentNode->removeChild($nextSibling);
break;
} else {
break;
}
} else {
$nextSibling = $nextSibling->nextSibling;
}
}
}
});
// Modify the DOM by wrapping the or
or
tags inside a
$existingClasses = $imgElement->getAttribute('class');
$newClasses = 'img-fluid rounded-2 shadow-sm mb-2';
$updatedClasses = ($existingClasses ? $existingClasses.' ' : '').$newClasses;
$imgElement->setAttribute('class', $updatedClasses);
// Create a new
inside the