Magento 2 Blog Extension is a better blog extension for Magento 2 platform. These include all useful features of Wordpress CMS

Overview

Magento 2 Blog extension FREE

Magento 2 Better Blog by Mageplaza is integrated right into the Magento backend so you can manage your blog and your e-commerce store all in the one place. It is the perfect marketing tool for your bussiness that not only provides update information to your existing customers but also drive more visitors to your online store.

Codacy Badge Latest Stable Version Total Downloads

1. Documentation

2. FAQs

Q: I got error: Mageplaza_Core has been already defined

A: Read solution: https://github.com/mageplaza/module-core/issues/3

3. How to install

✓ Install via composer (recommend)

Run the following command in Magento 2 root folder:

With Marketing Automation + GraphQL (Support PWA) (recommend):

composer require mageplaza/magento-2-blog-extension mageplaza/module-blog-graphql mageplaza/module-smtp
php bin/magento setup:upgrade
php bin/magento setup:static-content:deploy

With GraphQL (Support PWA):

composer require mageplaza/magento-2-blog-extension mageplaza/module-blog-graphql
php bin/magento setup:upgrade
php bin/magento setup:static-content:deploy

Without GraphQL:

composer require mageplaza/magento-2-blog-extension mageplaza/module-smtp
php bin/magento setup:upgrade
php bin/magento setup:static-content:deploy

✓ Install Magento 2 Blog GraphQL module only

composer require mageplaza/module-blog-graphql
php bin/magento setup:upgrade
php bin/magento setup:static-content:deploy

✓ Install ready-to-paste package

4. Contribute to this module

Feel free to Fork and contrinute to this module and create a pull request so we will merge your changes to master branch.

Thanks the contributors


6. Blog benefits

Magento 2 blog extension can give you a greate opportunity to communicate with your potential and existing customers. Blog posts can help you to create a 2-way communication platform to publish new information such as news, promotions, comming products. Read more benefits of Blog.

Magento 2 blog extension by Mageplaza

Drive more traffics

“Raise your hand if you need more targeted visitors. Sure, me too.”

Think of total number of pages you can find on your online store. Maybe not a ton, right? And think of how frequently you update those pages. Maybe not that usually, right? Well, running a blog helps resolve both of those problems.

Writing a blog helps as well you get discovered via social networks. Any time you write a blog post, you are building content that many people can share on social networking sites such as Twitter, LinkedIn, Facebook, Pinterest – which will help expose your web business to a new one audience that will not know you yet.

It may help convert that traffic into leads.

Similar to every blog post you write is yet another indexed page, each post is really a new chance to generate new leads. The way in which this works is absolutely simple: Just put in a lead-generating call-to-action to each blog post.

Boost Search Engine Optimization Ranking

Search Engines like Google loves fresh content. What better method to deliver frequent content compared to blog posts. By writing blog consistently, you provide Google and other search engines new content to index and you also create chances to plug in those all-important keywords to boost your visibility on search engine results pages (SERPS).

Build relationships with your customers

Writing a blog enables you to interact with your website visitors. You can accomplish this by asking your visitors questions at the conclusion of your posts to obtain the conversation going or simply by allowing comments and feedback. By reviewing and answering readers’ comments, you may create a rapport together with your audience, build trust, and gain valuable insight into what your visitors are seeking.

Magento 2 Blog full feature list

  • Responsive design
  • SEO friendly
  • Post attributes
  • Multiselect tags
  • Numerous Comment engine: Magento Built-in comments, Facebook Comment, Disqus Comment.
  • RSS Optimization
  • WYSIWYG editor in admin
  • Blog breadcrumbs
  • Import from AW M1 Blog, Magefan Blog, Wordpress
  • Integrate Magento Sitemap or Blog sitemap
  • Multistores support

Blog features for Magento 2

A better blog for your e-commerce store without adding any 3rd-party framework. Better blog extension allows you manage categories, posts, comments on Magento 2 back-end. The system will update you when there is a new comment submit. This is a great solution for building relevant SEO-friendly text links, and serves as assistance in building sales strategy.

Responsive design

Mobile-friendly design will make allow you customers to read your blog posts with maximum comfort on tablets and smartphones. Using the off-canvas menu, they will be able to see widgets and interact with the blog search. Tested on Madison, Ultimo, Porto theme.

Flexible display posts

It is very easy to add recent posts, post in specific category in homepage. Your customers also see recent posts in sidebar.

SEO friendly

Properly optimized blog can get your site higher in search results and lead more potential customers. Better Blog allows you to create meta information not only for posts, but also for categories and tags.

Post attributes

You can create unlimited attributes for post. It is extremely customized your blog by adding as many post attributes as you want to. It displays right in Post Edit and Frontend. No code modification required.

Comments

Better Blog supports 3 types of comments: built-in comment, Disqus comment (coming soon), and Facebook comment (coming soon). You can switch comment solution in configuration.

Sharing posts

Better blog is integrated with Addthis, that why your customers can share posts via about hundred social networks such as Facebook, Google+, Twitter, Instagram, Pinterest, Tumblr, Delicious, Digg , StubmleUpon, Linkedin, Reddit or email ….

RSS Optimization

Full RSS integration into Magento 2. The blog RSS feed appears right next to the standard product and Magento 2 RSS feeds, allowing users that are familiar with your website to easily find all the blog RSS feeds easily and simply.

Importer (NEW)

Import Blog Posts, Categories, Tags from Wordpress, AW M1 Blog, Magefan M2 Blog


7. USER GUIDE

General Configuration

  • Login to Magento Admin, Better Blog > Settings.

  • Open General section,

    • Enable the module when choosing “Yes” in the required field.

    • Set name for the new blog

    • Enter the URL Prefix and URL Suffix. If leave empty for no suffix, use the default configuration (html)

    • To make the blog link visible on the top/ footer links on your site, set Show Blog Link in Top/ Footer Links to "Yes".

    • To show the sidebar on the storefront, select "Yes" in the Show Sidebar Right/ Left field.

blog configuration

  • Open Sidebar section,

    • Enter Number of recent posts that display on the sidebar.

    • Enter Number of most view posts that display on the sidebar.

config sidebar

  • Open Comments section,

    • Set Number of recent posts to one of the following options:

      • Disqus Comment
      • Facebook Comment
      • Disable Completely

configure comment

  • Open SEO section, you can configure the meta that is useful for your better SEO

    • Set Meta title for posts list page
    • Set Meta description for posts list page
    • Set Meta keywords for posts list page

configure SEO

  • Open Social section,

    • Enable social buttons on the blog page
    • In the Pubid field, insert ID for Share buttons that get from https://addthis.com.

    In Social share session, we use Addthis.com to add more than 200 share buttons, and display only 4 most popular share buttons. You can custom these buttons by add your own Addthis Pub-id

social buttons

  • Click on Save Config when complete.

How to Create a New Post

  • Step 1: Complete the post information
  • Step 2: Assign to Topic
  • Step 3: Assign to Categorie
  • Step 4: Assign Tags to the post

Step 1: Complete the post information

  • To display the new post, choose "Yes" in the Enabled field

  • Login to Magento Admin, Better Blog > Posts

  • On the upper-right corner, tap Add New Posts button

  • Set Name for the new post

  • Enter Short Description if you need

  • Use WYSIWYG Mode to insert the post content that allows showing right as in the storefront.

    If you want to show the content under code, tap Show/ Hide Editor button.

  • Upload image from your brower in the Image option.

  • Enter the URL Key that the visitor can access the blog post

  • To allow the readers leave comments on your post, choose "Yes" in the Allow Comment field.

  • Complete Meta Title, Meta Description,and Meta Keywords for your better SEO.

  • Set Meta Robots to one of the following opitons:

    • Index, Follow
    • NoIndex, NoFollow
    • NoIndex, Follow
    • Index, NoFollow
  • Tap Save and Continue Edit

Step 2: Assign the post to Topic

  • You can do it when you create a new post in the Topics tab, or go to Posts tab

  • In the list of the available posts, mark the checkbox that is next to the posts you want to assign

  • Tap Save and Continue Edit

Step 3: Assign to Categories

  • You can do it when you create a new post in the Categories tab, or go to Posts tab

  • In the list of the available posts, mark the checkbox that is next to the posts you want to assign

  • Tap Save and Continue Edit

Step 4: Assign Tags to the post

  • You can do it when you create a new post in the Tags tab, or go to Posts tab

  • In the list of the available posts, mark the checkbox that is next to the posts you want to assign

  • Tap Save and Continue Edit, then hit Save Post to finish.

How to create a new Tag

  • Login to Magento Admin, Better Blog > Categories

  • To active the new tag, set Enabled to "Yes"

  • Set Name for the new tag

  • Use WYSIWYG Mode to enter the description of the tag

  • Enter the URL Key that the visitor can access the tag

  • If need, you can assign the new tag to specific post.

  • Click on Save Tag when complete.

How to Create a new Topic

  • Login to Magento Admin, Better Blog > Topics

  • To active the new topic, set Enabled to "Yes"

  • Set Name for the new topic

  • Use WYSIWYG Mode to enter the description of the topic

  • Enter the URL Key that the visitor can access the topic

  • Complete Meta Title, Meta Description,and Meta Keywords for your better SEO.

  • Set Meta Robots to one of the following opitons:

    • Index, Follow
    • NoIndex, NoFollow
    • NoIndex, Follow
    • Index, NoFollow
  • If need, you can assign the new topic to specific post.

  • Click on Save Topic when complete.

How to Create a new category

  • Login to Magento Admin, Better Blog > Categories

  • To active the new category, set Enabled to "Yes"

  • Set Name for the new category

  • Use WYSIWYG Mode to enter the description of the category

  • Enter the URL Key that the visitor can access the category

  • Complete Meta Title, Meta Description,and Meta Keywords for your better SEO.

  • Set Meta Robots to one of the following opitons:

    • Index, Follow
    • NoIndex, NoFollow
    • NoIndex, Follow
    • Index, NoFollow
  • If need, you can assign the new category to specific post.

  • Click on Save Category when complete.

How to add custom CMS Static Block in Blog Post

In this guide, we will show you how to add a custom content in Blog post such as: Call to action, promoted banner ...

There are few hidden tricks in Mageplza Blog for Magento 2. Here are hidden CMS Static Block:

  • mageplaza_blog_view_under_content : Under Content section
  • mageplaza_blog_view_above_comment : Above Comment section
  • mageplaza_blog_sidebar_above_popular_widget : Above Popular/Recent posts widgets
  • mageplaza_blog_sidebar_above_categories_widget : Above Categories widgets
  • mageplaza_blog_sidebar_above_tags_widget : Above Tags widgets
  • mageplaza_blog_sidebar_under_tags_widget : Under Tags wigets

See this:

blog magento 2

How to create CMS static block in Magento 2

From Admin panel > Content > Blocks > Add New Block

Then fill the content of block such as Name, idenity, content ...

then click on Save and continue


8. BLOG CHANGELOG

Learn more https://www.mageplaza.com/releases/blog/

Mageplaza extensions on Magento Marketplace, Github

Magento 2 One Step Checkout extension

Magento 2 SEO extension

Magento 2 Reward Points

Magento 2 Blog extension

Magento 2 Layered Navigation extension

Magento 2 Google Tag Manager Enhanced eCommerce

Magento 2 Social Login on Github

Magento 2 SEO on Github

Magento 2 SMTP on Github

Magento 2 Product Slider on Github

Magento 2 Banner on Github

Magento 2 GDPR

Comments
  • Exception adding a Blog Post

    Exception adding a Blog Post

    1. Magento: 2.3.2
    2. PHP: 7.1

    Steps to reproduce

    1. Adding a Blog Post - after clicking the SAVE button

    Actual result

    {"0":"The file was not uploaded.","1":"<pre>#1 Magento\\MediaStorage\\Model\\File\\Uploader->__construct('image', &Magento\\MediaStorage\\Helper\\File\\Storage\\Database#000000002b305d9900000000116d0bd3#, &Magento\\MediaStorage\\Helper\\File\\Storage#000000002b30756d00000000116d0bd3#, &Magento\\MediaStorage\\Model\\File\\Validator\\NotProtectedExtension#000000002b30756300000000116d0bd3#) called at [vendor\/magento\/framework\/ObjectManager\/Factory\/AbstractFactory.php:116]\n#2 Magento\\Framework\\ObjectManager\\Factory\\AbstractFactory->createObject('Magento\\MediaSto...', array('image', &Magento\\MediaStorage\\Helper\\File\\Storage\\Database#000000002b305d9900000000116d0bd3#, &Magento\\MediaStorage\\Helper\\File\\Storage#000000002b30756d00000000116d0bd3#, &Magento\\MediaStorage\\Model\\File\\Validator\\NotProtectedExtension#000000002b30756300000000116d0bd3#)) called at [vendor\/magento\/framework\/ObjectManager\/Factory\/Dynamic\/Developer.php:66]\n#3 Magento\\Framework\\ObjectManager\\Factory\\Dynamic\\Developer->create('Magento\\MediaSto...', array('fileId' => 'image')) called at [vendor\/magento\/framework\/ObjectManager\/ObjectManager.php:56]\n#4 Magento\\Framework\\ObjectManager\\ObjectManager->create('\\Magento\\MediaSt...', array('fileId' => 'image')) called at [generated\/code\/Magento\/MediaStorage\/Model\/File\/UploaderFactory.php:43]\n#5 Magento\\MediaStorage\\Model\\File\\UploaderFactory->create(array('fileId' => 'image')) called at [vendor\/mageplaza\/module-core\/Helper\/Media.php:108]\n#6 Mageplaza\\Core\\Helper\\Media->uploadImage(array('author_id' => 1, 'name' => 'Welcome', 'enabled' => 1, 'short_descriptio...' => 752783310214752783310214, 'post_content' => '<p><span>7527833...', 'store_ids' => array(0), 'categories_ids' => 2, 'topics_ids' => '', 'tags_ids' => '', 'in_rss' => 0, 'allow_comment' => 1, 'publish_date' => '9\/12\/2019', 'publish_time' => array(14, 31, 07), 'url_key' => 'welcome-to-cafe-...', 'meta_title' => 'welcome-to-cafe-...', 'meta_description' => 'welcome-to-cafe-...', 'meta_keywords' => 'welcome-to-cafe-...', 'meta_robots' => 'INDEX,FOLLOW', 'layout' => '1column'), 'image', 'post', NULL) called at [vendor\/mageplaza\/magento-2-blog-extension\/Controller\/Adminhtml\/Post\/Save.php:141]\n#7 Mageplaza\\Blog\\Controller\\Adminhtml\\Post\\Save->prepareData(&Mageplaza\\Blog\\Model\\Post#000000002b30756b00000000116d0bd3#, array('author_id' => 1, 'name' => 'Welcome', 'enabled' => 1, 'short_descriptio...' => 752783310214752783310214, 'post_content' => '<p><span>7527833...', 'store_ids' => array(0), 'categories_ids' => 2, 'topics_ids' => '', 'tags_ids' => '', 'in_rss' => 0, 'allow_comment' => 1, 'publish_date' => '9\/12\/2019', 'publish_time' => array(14, 31, 07), 'url_key' => 'welcome-to-cafe-...', 'meta_title' => 'welcome-to-cafe-...', 'meta_description' => 'welcome-to-cafe-...', 'meta_keywords' => 'welcome-to-cafe-...', 'meta_robots' => 'INDEX,FOLLOW', 'layout' => '1column')) called at [vendor\/mageplaza\/magento-2-blog-extension\/Controller\/Adminhtml\/Post\/Save.php:92]\n#8 Mageplaza\\Blog\\Controller\\Adminhtml\\Post\\Save->execute() called at [vendor\/magento\/framework\/App\/Action\/Action.php:108]\n#9 Magento\\Framework\\App\\Action\\Action->dispatch(&Magento\\Framework\\App\\Request\\Http#000000002b305c4200000000116d0bd3#) called at [vendor\/magento\/module-backend\/App\/AbstractAction.php:231]\n#10 Magento\\Backend\\App\\AbstractAction->dispatch(&Magento\\Framework\\App\\Request\\Http#000000002b305c4200000000116d0bd3#) called at [vendor\/magento\/framework\/Interception\/Interceptor.php:58]\n#11 Mageplaza\\Blog\\Controller\\Adminhtml\\Post\\Save\\Interceptor->___callParent('dispatch', array(&Magento\\Framework\\App\\Request\\Http#000000002b305c4200000000116d0bd3#)) called at [vendor\/magento\/framework\/Interception\/Interceptor.php:138]\n#12 Mageplaza\\Blog\\Controller\\Adminhtml\\Post\\Save\\Interceptor->Magento\\Framework\\Interception\\{closure}(&Magento\\Framework\\App\\Request\\Http#000000002b305c4200000000116d0bd3#) called at [vendor\/magento\/module-backend\/App\/Action\/Plugin\/Authentication.php:143]\n#13 Magento\\Backend\\App\\Action\\Plugin\\Authentication->aroundDispatch(&Mageplaza\\Blog\\Controller\\Adminhtml\\Post\\Save\\Interceptor#000000002b305f3900000000116d0bd3#, &Closure#000000002b305f3f00000000116d0bd3#, &Magento\\Framework\\App\\Request\\Http#000000002b305c4200000000116d0bd3#) called at [vendor\/magento\/framework\/Interception\/Interceptor.php:135]\n#14 Mageplaza\\Blog\\Controller\\Adminhtml\\Post\\Save\\Interceptor->Magento\\Framework\\Interception\\{closure}(&Magento\\Framework\\App\\Request\\Http#000000002b305c4200000000116d0bd3#) called at [vendor\/magento\/framework\/Interception\/Interceptor.php:153]\n#15 Mageplaza\\Blog\\Controller\\Adminhtml\\Post\\Save\\Interceptor->___callPlugins('dispatch', array(&Magento\\Framework\\App\\Request\\Http#000000002b305c4200000000116d0bd3#), NULL) called at [generated\/code\/Mageplaza\/Blog\/Controller\/Adminhtml\/Post\/Save\/Interceptor.php:26]\n#16 Mageplaza\\Blog\\Controller\\Adminhtml\\Post\\Save\\Interceptor->dispatch(&Magento\\Framework\\App\\Request\\Http#000000002b305c4200000000116d0bd3#) called at [vendor\/magento\/framework\/App\/FrontController.php:159]\n#17 Magento\\Framework\\App\\FrontController->processRequest(&Magento\\Framework\\App\\Request\\Http#000000002b305c4200000000116d0bd3#, &Mageplaza\\Blog\\Controller\\Adminhtml\\Post\\Save\\Interceptor#000000002b305f3900000000116d0bd3#) called at [vendor\/magento\/framework\/App\/FrontController.php:99]\n#18 Magento\\Framework\\App\\FrontController->dispatch(&Magento\\Framework\\App\\Request\\Http#000000002b305c4200000000116d0bd3#) called at [vendor\/magento\/framework\/Interception\/Interceptor.php:58]\n#19 Magento\\Framework\\App\\FrontController\\Interceptor->___callParent('dispatch', array(&Magento\\Framework\\App\\Request\\Http#000000002b305c4200000000116d0bd3#)) called at [vendor\/magento\/framework\/Interception\/Interceptor.php:138]\n#20 Magento\\Framework\\App\\FrontController\\Interceptor->Magento\\Framework\\Interception\\{closure}(&Magento\\Framework\\App\\Request\\Http#000000002b305c4200000000116d0bd3#) called at [vendor\/magento\/framework\/Interception\/Interceptor.php:153]\n#21 Magento\\Framework\\App\\FrontController\\Interceptor->___callPlugins('dispatch', array(&Magento\\Framework\\App\\Request\\Http#000000002b305c4200000000116d0bd3#), array(array('default_store_se...', 'page_cache_from_...', 'storeCookieValid...', 'install', 'configHash'))) called at [generated\/code\/Magento\/Framework\/App\/FrontController\/Interceptor.php:26]\n#22 Magento\\Framework\\App\\FrontController\\Interceptor->dispatch(&Magento\\Framework\\App\\Request\\Http#000000002b305c4200000000116d0bd3#) called at [vendor\/magento\/framework\/App\/Http.php:137]\n#23 Magento\\Framework\\App\\Http->launch() called at [vendor\/magento\/framework\/App\/Bootstrap.php:261]\n#24 Magento\\Framework\\App\\Bootstrap->run(&Magento\\Framework\\App\\Http\\Interceptor#000000002b305c3600000000116d0bd3#) called at [index.php:39]\n<\/pre>","url":"\/admin_16yuvj\/mageplaza_blog\/post\/save\/key\/5bb2fde0fca510c166d69a611897a3ef330a9b62a88098d118be298468e6b5e6\/active_tab\/post\/","script_name":"\/index.php"}

    I get an error with an exception number. The Exception file in /var/reprt/ reads as above.

    Any advice would be gratefully received.

    Kevin

    opened by CafeRico 28
  • setup:upgrade - Area code not set: Area code must be set before starting a session.

    setup:upgrade - Area code not set: Area code must be set before starting a session.

    Mageplaza_Blog - Area code not set: Area code must be set before starting a session.

    Preconditions

    1. Magento: 2.2.7
    2. PHP: 7.1
    3. MySQL: 5.7.28
    4. Blog v3.1.0
    opened by macsanta 19
  • Error when saving blog post without an image

    Error when saving blog post without an image

    Preconditions

    1. Magento: 2.2.8
    2. PHP: 7.1
    3. Mageplaza module version: 3.0.4

    Steps to reproduce

    1. Create a blog post without image
    2. Save

    or...

    1. Create a blog post including image
    2. Save
    3. Open up for editing
    4. Save it again

    Expected result

    1. Blog post should save the updates

    Actual result

    1. Magento throws an exception "The file was not uploaded."

    So basically the module always expects a new image to be attached to a post even if there already has been uploaded an image to it.

    Full Exception:

    Exception #0 (Exception): The file was not uploaded.

    #1 Magento\MediaStorage\Model\File\Uploader->__construct('image', &Magento\MediaStorage\Helper\File\Storage\Database#0000000060cfa2ea000000004348112d#, &Magento\MediaStorage\Helper\File\Storage#0000000060cfa511000000004348112d#, &Magento\MediaStorage\Model\File\Validator\NotProtectedExtension#0000000060cfa510000000004348112d#) called at [vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php:111]
    #2 Magento\Framework\ObjectManager\Factory\AbstractFactory->createObject('Magento\MediaSto...', array('image', &Magento\MediaStorage\Helper\File\Storage\Database#0000000060cfa2ea000000004348112d#, &Magento\MediaStorage\Helper\File\Storage#0000000060cfa511000000004348112d#, &Magento\MediaStorage\Model\File\Validator\NotProtectedExtension#0000000060cfa510000000004348112d#)) called at [vendor/magento/framework/ObjectManager/Factory/Compiled.php:108]
    #3 Magento\Framework\ObjectManager\Factory\Compiled->create('Magento\MediaSto...', array('fileId' => 'image')) called at [vendor/magento/framework/ObjectManager/ObjectManager.php:56]
    #4 Magento\Framework\ObjectManager\ObjectManager->create('\Magento\MediaSt...', array('fileId' => 'image')) called at [generated/code/Magento/MediaStorage/Model/File/UploaderFactory.php:43]
    #5 Magento\MediaStorage\Model\File\UploaderFactory->create(array('fileId' => 'image')) called at [vendor/mageplaza/module-core/Helper/Media.php:108]
    #6 Mageplaza\Core\Helper\Media->uploadImage(array('author_id' => 1, 'name' => 'strgsrg', 'enabled' => 1, 'front' => 0, 'short_descriptio...' => 'srgsarg', 'post_content' => 'aregargarg', 'store_ids' => array(0), 'categories_ids' => 4, 'topics_ids' => '', 'tags_ids' => '', 'publish_date' => '5/27/2019', 'publish_time' => array(17, 25, 47), 'url_key' => '', 'meta_title' => '', 'meta_description' => '', 'meta_keywords' => '', 'meta_robots' => 'INDEX,FOLLOW'), 'image', 'post', NULL) called at [vendor/mageplaza/magento-2-blog-extension/Controller/Adminhtml/Post/Save.php:138]
    #7 Mageplaza\Blog\Controller\Adminhtml\Post\Save->prepareData(&Mageplaza\Blog\Model\Post#0000000060cfa50b000000004348112d#, array('author_id' => 1, 'name' => 'strgsrg', 'enabled' => 1, 'front' => 0, 'short_descriptio...' => 'srgsarg', 'post_content' => 'aregargarg', 'store_ids' => array(0), 'categories_ids' => 4, 'topics_ids' => '', 'tags_ids' => '', 'publish_date' => '5/27/2019', 'publish_time' => array(17, 25, 47), 'url_key' => '', 'meta_title' => '', 'meta_description' => '', 'meta_keywords' => '', 'meta_robots' => 'INDEX,FOLLOW')) called at [vendor/mageplaza/magento-2-blog-extension/Controller/Adminhtml/Post/Save.php:92]
    #8 Mageplaza\Blog\Controller\Adminhtml\Post\Save->execute() called at [vendor/magento/framework/App/Action/Action.php:107]
    #9 Magento\Framework\App\Action\Action->dispatch(&Magento\Framework\App\Request\Http#0000000060cfa38c000000004348112d#) called at [vendor/magento/module-backend/App/AbstractAction.php:235]
    #10 Magento\Backend\App\AbstractAction->dispatch(&Magento\Framework\App\Request\Http#0000000060cfa38c000000004348112d#) called at [vendor/magento/framework/Interception/Interceptor.php:58]
    #11 Mageplaza\Blog\Controller\Adminhtml\Post\Save\Interceptor->___callParent('dispatch', array(&Magento\Framework\App\Request\Http#0000000060cfa38c000000004348112d#)) called at [vendor/magento/framework/Interception/Interceptor.php:138]
    #12 Mageplaza\Blog\Controller\Adminhtml\Post\Save\Interceptor->Magento\Framework\Interception\{closure}(&Magento\Framework\App\Request\Http#0000000060cfa38c000000004348112d#) called at [app/code/WeltPixel/Backend/Plugin/Utility.php:76]
    #13 WeltPixel\Backend\Plugin\Utility->aroundDispatch(&Mageplaza\Blog\Controller\Adminhtml\Post\Save\Interceptor#0000000060cfa7c6000000004348112d#, &Closure#0000000060cfa7c8000000004348112d#, &Magento\Framework\App\Request\Http#0000000060cfa38c000000004348112d#) called at [vendor/magento/framework/Interception/Interceptor.php:135]
    #14 Mageplaza\Blog\Controller\Adminhtml\Post\Save\Interceptor->Magento\Framework\Interception\{closure}(&Magento\Framework\App\Request\Http#0000000060cfa38c000000004348112d#) called at [vendor/magento/module-backend/App/Action/Plugin/Authentication.php:143]
    #15 Magento\Backend\App\Action\Plugin\Authentication->aroundDispatch(&Mageplaza\Blog\Controller\Adminhtml\Post\Save\Interceptor#0000000060cfa7c6000000004348112d#, &Closure#0000000060cfa7c8000000004348112d#, &Magento\Framework\App\Request\Http#0000000060cfa38c000000004348112d#) called at [vendor/magento/framework/Interception/Interceptor.php:135]
    #16 Mageplaza\Blog\Controller\Adminhtml\Post\Save\Interceptor->Magento\Framework\Interception\{closure}(&Magento\Framework\App\Request\Http#0000000060cfa38c000000004348112d#) called at [vendor/magento/framework/Interception/Interceptor.php:153]
    #17 Mageplaza\Blog\Controller\Adminhtml\Post\Save\Interceptor->___callPlugins('dispatch', array(&Magento\Framework\App\Request\Http#0000000060cfa38c000000004348112d#), NULL) called at [generated/code/Mageplaza/Blog/Controller/Adminhtml/Post/Save/Interceptor.php:26]
    #18 Mageplaza\Blog\Controller\Adminhtml\Post\Save\Interceptor->dispatch(&Magento\Framework\App\Request\Http#0000000060cfa38c000000004348112d#) called at [vendor/magento/framework/App/FrontController.php:55]
    #19 Magento\Framework\App\FrontController->dispatch(&Magento\Framework\App\Request\Http#0000000060cfa38c000000004348112d#) called at [vendor/magento/framework/Interception/Interceptor.php:58]
    #20 Magento\Framework\App\FrontController\Interceptor->___callParent('dispatch', array(&Magento\Framework\App\Request\Http#0000000060cfa38c000000004348112d#)) called at [vendor/magento/framework/Interception/Interceptor.php:138]
    #21 Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}(&Magento\Framework\App\Request\Http#0000000060cfa38c000000004348112d#)
    #22 call_user_func_array(&Closure#0000000060cfa2f6000000004348112d#, array(&Magento\Framework\App\Request\Http#0000000060cfa38c000000004348112d#)) called at [vendor/m2epro/magento2-extension/Plugin/AbstractPlugin.php:34]
    #23 Ess\M2ePro\Plugin\AbstractPlugin->execute('dispatch', &Magento\Framework\App\FrontController\Interceptor#0000000060cfa2c4000000004348112d#, &Closure#0000000060cfa2f6000000004348112d#, array(&Magento\Framework\App\Request\Http#0000000060cfa38c000000004348112d#)) called at [vendor/m2epro/magento2-extension/Plugin/HealthStatus/Magento/Framework/App/FrontController.php:42]
    #24 Ess\M2ePro\Plugin\HealthStatus\Magento\Framework\App\FrontController->aroundDispatch(&Magento\Framework\App\FrontController\Interceptor#0000000060cfa2c4000000004348112d#, &Closure#0000000060cfa2f6000000004348112d#, &Magento\Framework\App\Request\Http#0000000060cfa38c000000004348112d#) called at [vendor/magento/framework/Interception/Interceptor.php:135]
    #25 Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}(&Magento\Framework\App\Request\Http#0000000060cfa38c000000004348112d#) called at [vendor/magento/framework/Interception/Interceptor.php:153]
    #26 Magento\Framework\App\FrontController\Interceptor->___callPlugins('dispatch', array(&Magento\Framework\App\Request\Http#0000000060cfa38c000000004348112d#), array(array('mstCoreDispatch'))) called at [generated/code/Magento/Framework/App/FrontController/Interceptor.php:26]
    #27 Magento\Framework\App\FrontController\Interceptor->dispatch(&Magento\Framework\App\Request\Http#0000000060cfa38c000000004348112d#) called at [vendor/magento/framework/App/Http.php:136]
    #28 Magento\Framework\App\Http->launch() called at [vendor/magento/framework/Interception/Interceptor.php:58]
    #29 Magento\Framework\App\Http\Interceptor->___callParent('launch', array()) called at [vendor/magento/framework/Interception/Interceptor.php:138]
    #30 Magento\Framework\App\Http\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/msp/shield/Plugin/AppInterfacePlugin.php:111]
    #31 MSP\Shield\Plugin\AppInterfacePlugin->aroundLaunch(&Magento\Framework\App\Http\Interceptor#0000000060cfa36b000000004348112d#, &Closure#0000000060cfa36f000000004348112d#) called at [vendor/magento/framework/Interception/Interceptor.php:135]
    #32 Magento\Framework\App\Http\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/msp/adminrestriction/Plugin/AppInterfacePlugin.php:134]
    #33 MSP\AdminRestriction\Plugin\AppInterfacePlugin->aroundLaunch(&Magento\Framework\App\Http\Interceptor#0000000060cfa36b000000004348112d#, &Closure#0000000060cfa36f000000004348112d#) called at [vendor/magento/framework/Interception/Interceptor.php:135]
    #34 Magento\Framework\App\Http\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/msp/antivirus/Plugin/AppInterfacePlugin.php:104]
    #35 MSP\AntiVirus\Plugin\AppInterfacePlugin->aroundLaunch(&Magento\Framework\App\Http\Interceptor#0000000060cfa36b000000004348112d#, &Closure#0000000060cfa36f000000004348112d#) called at [vendor/magento/framework/Interception/Interceptor.php:135]
    #36 Magento\Framework\App\Http\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/framework/Interception/Interceptor.php:153]
    #37 Magento\Framework\App\Http\Interceptor->___callPlugins('launch', array(), NULL) called at [generated/code/Magento/Framework/App/Http/Interceptor.php:26]
    #38 Magento\Framework\App\Http\Interceptor->launch() called at [vendor/magento/framework/App/Bootstrap.php:257]
    #39 Magento\Framework\App\Bootstrap->run(&Magento\Framework\App\Http\Interceptor#0000000060cfa36b000000004348112d#) called at [pub/index.php:37]
    
    opened by OvalMedia 19
  • Sitemap generation fails because of missing image info

    Sitemap generation fails because of missing image info

    Preconditions (*)

    1. Magento 2.4.1
    2. PHP 7.3

    Steps to reproduce (*)

    1. Create blog posts with image(s)
    2. Generate sitemap

    Expected result (*)

    1. Sitemap gets generated with all products, categories and blog posts

    Actual result (*)

    1. Generation fails with error "TypeError: Argument 1 passed to Magento\Sitemap\Model\Sitemap::escapeXmlText() must be of the type string, null given, called in /vendor/magento/module-sitemap/Model/Sitemap.php on line 576 and defined in /vendor/magento/module-sitemap/Model/Sitemap.php:598"

    In magento's function _getSitemapRow (\vendor\magento\module-sitemap\Model\Sitemap.php) the $images object is supposed to contain a title which is passed to escapeXmlText().

    I created a dump on each item to see what's wrong. This is an image (data object) of a product:

    Array
    (
        [collection] => Array
            (
                [0] => Magento\Framework\DataObject Object
                    (
                        [_data:protected] => Array
                            (
                                [url] => https://www.example.com/media/catalog/product/cache/4014ca3c284ee8bfa0947c8aaa649e60/t/e/test.jpg
                                [caption] => 
                            )
    
                    )
    
            )
    
        [title] => My awesome product
        [thumbnail] => https://www.example.com/media/catalog/product/cache/4014ca3c284ee8bfa0947c8aaa649e60/t/e/test.jpg
    )
    

    This is an image of a blog post:

    Array
    (
        [collection] => Array
            (
                [0] => Magento\Framework\DataObject Object
                    (
                        [_data:protected] => Array
                            (
                                [url] => https://www.example.com/media/mageplaza/blog/post/t/e/test.jpg
                                [caption] => 
                            )
    
                    )
    
            )
    
    )
    

    It is missing the title property which results in $images->getTitle() to return NULL instead of a string. escapeXmlText expects a string, which is why it fails.

    opened by OvalMedia 18
  • Posts URLs are being generated on a weird way

    Posts URLs are being generated on a weird way

    For two store views (FR and EN), there have been some posts configured and created. Subsequently there are weird url's generated that are being submitted to Google, for instance:

    https://www.XXX.org/en/blog/post/special-offer is okay, but there is also another url generated for the French store, which is basically a 404 and is reported on Google as a Submitted URL with crawl issues: https://www.XXX.org/fr/blog/post/special-offer (this last url should not be generated)

    When looking at the backend, there is only one blog created, which is the one with the url https://www.XXX.org/en/blog/post/special-offer

    So every time a blog post is created for one store view, there seems to be a similar url generated for the another store view, which should not happen.

    Preconditions

    1. Magento: 2.2.7
    2. PHP: 7.0.33-1 (cli) (built: Feb 8 2019 10:44:27) ( NTS )
    3. MySQL: Ver 14.14 Distrib 5.6.37-82.2, for debian-linux-gnu (x86_64) using 6.3
    opened by julianmurillo 18
  • [Resolved] Blog version 2.6.0 compile error

    [Resolved] Blog version 2.6.0 compile error

    Updating extensions from 2.5.0 to 2.6.0 to fix problems with sitemap following error popup when running command php bin/magento setup:di:compile

    Preconditions

    1. Magento: 2.2.1

    Steps to reproduce

    1. Update blog extension to 2.6.0
    2. Run command php bin/magento setup:di:compile

    Expected result

    1. Compile should run without any error

    Actual result

    image

    opened by Ig0r-M-magic42 16
  • Saving Post with no image fails

    Saving Post with no image fails

    Preconditions

    1. Magento: 2.3.1
    2. PHP: 7.2.16
    3. MySQL: 5.7.25
    4. Mageplaza Blog Extension: Version 3.0.5

    Steps to reproduce

    1. Install Mageplaza Blog Extension via composer
    2. Activate Extension in Magento-Configuration
    3. In Magento-Admin Navigate to Content -> Manage Posts
    4. Click on Add New Post
    5. Type in Title, Description and some content but upload no image
    6. Click on Save

    (btw: it doesn't matter if you're in developer or production mode)

    Expected result

    1. The blog post should be saved

    Actual result

    1. An Exception occurred:

    {"0":"The file was not uploaded.","1":"<pre>#1 Magento\\MediaStorage\\Model\\File\\Uploader->__construct() called at [vendor\/magento\/framework\/ObjectManager\/Factory\/AbstractFactory.php:116]\n#2 Magento\\Framework\\ObjectManager\\Factory\\AbstractFactory->createObject() called at [vendor\/magento\/framework\/ObjectManager\/Factory\/Compiled.php:108]\n#3 Magento\\Framework\\ObjectManager\\Factory\\Compiled->create() called at [vendor\/magento\/framework\/ObjectManager\/ObjectManager.php:56]\n#4 Magento\\Framework\\ObjectManager\\ObjectManager->create() called at [generated\/code\/Magento\/MediaStorage\/Model\/File\/UploaderFactory.php:43]\n#5 Magento\\MediaStorage\\Model\\File\\UploaderFactory->create() called at [vendor\/mageplaza\/module-core\/Helper\/Media.php:108]\n#6 Mageplaza\\Core\\Helper\\Media->uploadImage() called at [vendor\/mageplaza\/magento-2-blog-extension\/Controller\/Adminhtml\/Post\/Save.php:138]\n#7 Mageplaza\\Blog\\Controller\\Adminhtml\\Post\\Save->prepareData() called at [vendor\/mageplaza\/magento-2-blog-extension\/Controller\/Adminhtml\/Post\/Save.php:92]\n#8 Mageplaza\\Blog\\Controller\\Adminhtml\\Post\\Save->execute() called at [vendor\/magento\/framework\/App\/Action\/Action.php:108]\n#9 Magento\\Framework\\App\\Action\\Action->dispatch() called at [vendor\/magento\/module-backend\/App\/AbstractAction.php:231]\n#10 Magento\\Backend\\App\\AbstractAction->dispatch() called at [vendor\/magento\/framework\/Interception\/Interceptor.php:58]\n#11 Mageplaza\\Blog\\Controller\\Adminhtml\\Post\\Save\\Interceptor->___callParent() called at [vendor\/magento\/framework\/Interception\/Interceptor.php:138]\n#12 Mageplaza\\Blog\\Controller\\Adminhtml\\Post\\Save\\Interceptor->Magento\\Framework\\Interception\\{closure}() called at [vendor\/magento\/module-backend\/App\/Action\/Plugin\/Authentication.php:143]\n#13 Magento\\Backend\\App\\Action\\Plugin\\Authentication->aroundDispatch() called at [vendor\/magento\/framework\/Interception\/Interceptor.php:135]\n#14 Mageplaza\\Blog\\Controller\\Adminhtml\\Post\\Save\\Interceptor->Magento\\Framework\\Interception\\{closure}() called at [vendor\/magento\/framework\/Interception\/Interceptor.php:153]\n#15 Mageplaza\\Blog\\Controller\\Adminhtml\\Post\\Save\\Interceptor->___callPlugins() called at [generated\/code\/Mageplaza\/Blog\/Controller\/Adminhtml\/Post\/Save\/Interceptor.php:26]\n#16 Mageplaza\\Blog\\Controller\\Adminhtml\\Post\\Save\\Interceptor->dispatch() called at [vendor\/magento\/framework\/App\/FrontController.php:159]\n#17 Magento\\Framework\\App\\FrontController->processRequest() called at [vendor\/magento\/framework\/App\/FrontController.php:99]\n#18 Magento\\Framework\\App\\FrontController->dispatch() called at [vendor\/magento\/framework\/Interception\/Interceptor.php:58]\n#19 Magento\\Framework\\App\\FrontController\\Interceptor->___callParent() called at [vendor\/magento\/framework\/Interception\/Interceptor.php:138]\n#20 Magento\\Framework\\App\\FrontController\\Interceptor->Magento\\Framework\\Interception\\{closure}() called at [vendor\/magento\/framework\/Interception\/Interceptor.php:153]\n#21 Magento\\Framework\\App\\FrontController\\Interceptor->___callPlugins() called at [generated\/code\/Magento\/Framework\/App\/FrontController\/Interceptor.php:26]\n#22 Magento\\Framework\\App\\FrontController\\Interceptor->dispatch() called at [vendor\/magento\/framework\/App\/Http.php:136]\n#23 Magento\\Framework\\App\\Http->launch() called at [vendor\/magento\/framework\/App\/Bootstrap.php:258]\n#24 Magento\\Framework\\App\\Bootstrap->run() called at [pub\/index.php:40]\n<\/pre>","url":"\/admin_SHACO\/mpblog\/post\/save\/key\/74d548cb08bdc253795125d9b38d2b4b8a1873781544733fe4323a8272027fb5\/active_tab\/post\/","script_name":"\/index.php"}

    I can save a blog post without image. But that only works the following way:

    1. Add a post with an arbitrary image. Save that
    2. Open that post and delete the image. Save Now the blog has no image
    opened by espressobytes 15
  • Infinite loop of redirections because of a unparsable date

    Infinite loop of redirections because of a unparsable date

    Preconditions

    1. Magento: 2.3.0
    2. PHP: 7.2.14
    3. MySQL: MariaDB 10.1.37

    Steps to reproduce

    1. Install the module as described in the README: https://github.com/mageplaza/magento-2-blog ("Install via composer")
    2. On the backoffice: Content > Manage Posts > Add New Post
    3. Set a title
    4. Save

    Expected result

    1. The post is saved.

    Actual result

    An infinite loop of redirections ("The page isn’t redirecting properly" on Firefox or "ERR_TOO_MANY_REDIRECTS" on Chrome):

    https://mysite.com/admin/mpblog/post/save/key/a_long_token_1/active_tab/post/
    https://mysite.com/admin/mpblog/post/edit/id/2/key/a_long_token_2/active_tab/post/
    https://mysite.com/admin/mpblog/index/index/key/a_long_token_3/
    https://mysite.com/admin/mpblog/index/index/key/a_long_token_3/adminhtml/dashboard
    https://mysite.com/admin/mpblog/index/index/key/a_long_token_3/adminhtml/adminhtml/dashboard
    https://mysite.com/admin/mpblog/index/index/key/a_long_token_3/adminhtml/adminhtml/adminhtml/dashboard
    https://mysite.com/admin/mpblog/index/index/key/a_long_token_3/adminhtml/adminhtml/adminhtml/adminhtml/dashboard
    https://mysite.com/admin/mpblog/index/index/key/a_long_token_3/adminhtml/adminhtml/adminhtml/adminhtml/adminhtml/dashboard
    https://mysite.com/admin/mpblog/index/index/key/a_long_token_3/adminhtml/adminhtml/adminhtml/adminhtml/adminhtml/adminhtml/dashboard
    https://mysite.com/admin/mpblog/index/index/key/a_long_token_3/adminhtml/adminhtml/adminhtml/adminhtml/adminhtml/adminhtml/adminhtml/dashboard
    https://mysite.com/admin/mpblog/index/index/key/a_long_token/adminhtml/adminhtml/adminhtml/adminhtml/adminhtml/adminhtml/adminhtml/adminhtml/dashboard
    ...
    

    I've tried to reinstall the module multiple times and reinstall vendors, but the problem persists.

    Analyze

    I've check the file "var/log/system.log" and I saw:

    [2019-03-08 08:39:40] main.CRITICAL: Exception message: DateTime::__construct(): Failed to parse time string (8 mars 2019 08:39:40) at position 12 (0): Double time specification
    Trace: #0 /var/www/mysite/vendor/magento/framework/Stdlib/DateTime.php(58): DateTime->__construct('8 mars 2019 08:...')
    #1 /var/www/mysite/vendor/magento/framework/DB/Adapter/Pdo/Mysql.php(2853): Magento\Framework\Stdlib\DateTime->formatDate(Object(Zend_Date), true) #2 /var/www/mysite/vendor/magento/framework/DB/Adapter/Pdo/Mysql.php(3081): Magento\Framework\DB\Adapter\Pdo\Mysql->formatDate(Object(Zend_Date))
    #3 /var/www/mysite/vendor/magento/framework/Model/ResourceModel/AbstractResource.php(183): Magento\Framework\DB\Adapter\Pdo\Mysql->prepareColumnValue(Array, Object(Zend_Date))
    #4 /var/www/mysite/vendor/magento/framework/Model/ResourceModel/Db/AbstractDb.php(542): Magento\Framework\Model\ResourceModel\AbstractResource->_prepareDataForTable(Object(Mageplaza\Blog\Model\Author), 'ddmg_mageplaza_...')
    #5 /var/www/mysite/vendor/magento/framework/Model/ResourceModel/Db/AbstractDb.php(818): Magento\Framework\Model\ResourceModel\Db\AbstractDb->_prepareDataForSave(Object(Mageplaza\Blog\Model\Author))
    #6 /var/www/mysite/vendor/magento/framework/Model/ResourceModel/Db/AbstractDb.php(414): Magento\Framework\Model\ResourceModel\Db\AbstractDb->updateObject(Object(Mageplaza\Blog\Model\Author))
    #7 /var/www/mysite/vendor/magento/framework/Model/AbstractModel.php(648): Magento\Framework\Model\ResourceModel\Db\AbstractDb->save(Object(Mageplaza\Blog\Model\Author))
    #8 /var/www/mysite/vendor/mageplaza/magento-2-blog-extension/Model/ResourceModel/Post.php(523): Magento\Framework\Model\AbstractModel->save()
    #9 /var/www/mysite/vendor/mageplaza/magento-2-blog-extension/Model/ResourceModel/Post.php(184): Mageplaza\Blog\Model\ResourceModel\Post->saveAuthor()
    #10 /var/www/mysite/vendor/magento/framework/Model/ResourceModel/Db/AbstractDb.php(832): Mageplaza\Blog\Model\ResourceModel\Post->_afterSave(Object(Mageplaza\Blog\Model\Post))
    #11 /var/www/mysite/vendor/magento/framework/Model/ResourceModel/Db/AbstractDb.php(419): Magento\Framework\Model\ResourceModel\Db\AbstractDb->processAfterSaves(Object(Mageplaza\Blog\Model\Post))
    #12 /var/www/mysite/vendor/magento/framework/Model/AbstractModel.php(648): Magento\Framework\Model\ResourceModel\Db\AbstractDb->save(Object(Mageplaza\Blog\Model\Post))
    #13 /var/www/mysite/vendor/mageplaza/magento-2-blog-extension/Controller/Adminhtml/Post/Save.php(97): Magento\Framework\Model\AbstractModel->save()#14 /var/www/mysite/generated/code/Mageplaza/Blog/Controller/Adminhtml/Post/Save/Interceptor.php(24): Mageplaza\Blog\Controller\Adminhtml\Post\Save->execute()
    #15 /var/www/mysite/vendor/magento/framework/App/Action/Action.php(108): Mageplaza\Blog\Controller\Adminhtml\Post\Save\Interceptor->execute()
    #16 /var/www/mysite/vendor/magento/module-backend/App/AbstractAction.php(231): Magento\Framework\App\Action\Action->dispatch(Object(Magento\Framework\App\Request\Http))
    #17 /var/www/mysite/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Backend\App\AbstractAction->dispatch(Object(Magento\Framework\App\Request\Http))
    #18 /var/www/mysite/vendor/magento/framework/Interception/Interceptor.php(138): Mageplaza\Blog\Controller\Adminhtml\Post\Save\Interceptor->___callParent('dispatch', Array)
    #19 /var/www/mysite/vendor/magento/module-backend/App/Action/Plugin/Authentication.php(143): Mageplaza\Blog\Controller\Adminhtml\Post\Save\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Request\Http))
    #20 /var/www/mysite/vendor/magento/framework/Interception/Interceptor.php(135): Magento\Backend\App\Action\Plugin\Authentication->aroundDispatch(Object(Mageplaza\Blog\Controller\Adminhtml\Post\Save\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
    #21 /var/www/mysite/vendor/magento/framework/Interception/Interceptor.php(153): Mageplaza\Blog\Controller\Adminhtml\Post\Save\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Request\Http))
    #22 /var/www/mysite/generated/code/Mageplaza/Blog/Controller/Adminhtml/Post/Save/Interceptor.php(39): Mageplaza\Blog\Controller\Adminhtml\Post\Save\Interceptor->___callPlugins('dispatch', Array, NULL)
    #23 /var/www/mysite/vendor/magento/framework/App/FrontController.php(159): Mageplaza\Blog\Controller\Adminhtml\Post\Save\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
    #24 /var/www/mysite/vendor/magento/framework/App/FrontController.php(99): Magento\Framework\App\FrontController->processRequest(Object(Magento\Framework\App\Request\Http), Object(Mageplaza\Blog\Controller\Adminhtml\Post\Save\Interceptor))
    #25 /var/www/mysite/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\App\FrontController->dispatch(Object(Magento\Framework\App\Request\Http))
    #26 /var/www/mysite/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\App\FrontController\Interceptor->___callParent('dispatch', Array)
    #27 /var/www/mysite/app/code/Infortis/Cgen/Plugin/Magento/Framework/App/FrontController.php(32): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Request\Http))
    #28 /var/www/mysite/vendor/magento/framework/Interception/Interceptor.php(135): Infortis\Cgen\Plugin\Magento\Framework\App\FrontController->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
    #29 /var/www/mysite/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Request\Http))
    #30 /var/www/mysite/generated/code/Magento/Framework/App/FrontController/Interceptor.php(26): Magento\Framework\App\FrontController\Interceptor->___callPlugins('dispatch', Array, Array)
    #31 /var/www/mysite/vendor/magento/framework/App/Http.php(135): Magento\Framework\App\FrontController\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
    #32 /var/www/mysite/generated/code/Magento/Framework/App/Http/Interceptor.php(24): Magento\Framework\App\Http->launch()
    #33 /var/www/mysite/vendor/magento/framework/App/Bootstrap.php(258): Magento\Framework\App\Http\Interceptor->launch()
    #34 /var/www/mysite/index.php(39): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http\Interceptor))
    #35 {main} [] []
    

    A date is unparsable because of the french format: 8 mars 2019 08:39:40.

    After inspection, it is those lines on the file Model/ResourceModel/Author.php that cause the problem:

    https://github.com/mageplaza/magento-2-blog/blob/a955b92885ef8eef7d40524eb4fe5f4e0c3f73cc/Model/ResourceModel/Author.php#L75-L77

    By commenting those lines, the post is saved.

    I do not know Magento enough to solve this issue. Maybe use new \DateTime() instead of \Zend_Date::now()?

    The PR #164 seems related to this problem.

    opened by yannicka 14
  • setup:di:compile errors

    setup:di:compile errors

    Environment: Magento 2.1.0, PHP 5.6.24

    Bug: When compiling for production with bin/magento setup:di:compile the following errors occur:

    Compilation was started.
    Interception cache generation... 6/7 [========================>---]  85% 3 mins 471.0 MiB
    Errors during compilation:
            Mageplaza\Blog\Block\Frontend
                    Incorrect dependency in class Mageplaza\Blog\Block\Frontend in /var/www/vhosts/EC/WEB/12/app/code/Mageplaza/Blog/Block/Frontend.php
    \Magento\Store\Model\StoreManagerInterface already exists in context object
            Mageplaza\Blog\Controller\Adminhtml\Category
                    Incorrect dependency in class Mageplaza\Blog\Controller\Adminhtml\Category in /var/www/vhosts/EC/WEB/12/app/code/Mageplaza/Blog/Controller/Adminhtml/Category.php
    \Magento\Backend\Model\View\Result\RedirectFactory already exists in context object
            Mageplaza\Blog\Controller\Adminhtml\Tag
                    Incorrect dependency in class Mageplaza\Blog\Controller\Adminhtml\Tag in /var/www/vhosts/EC/WEB/12/app/code/Mageplaza/Blog/Controller/Adminhtml/Tag.php
    \Magento\Backend\Model\View\Result\RedirectFactory already exists in context object
            Mageplaza\Blog\Controller\Adminhtml\Topic
                    Incorrect dependency in class Mageplaza\Blog\Controller\Adminhtml\Topic in /var/www/vhosts/EC/WEB/12/app/code/Mageplaza/Blog/Controller/Adminhtml/Topic.php
    \Magento\Backend\Model\View\Result\RedirectFactory already exists in context object
            Mageplaza\Blog\Controller\Adminhtml\Post\Topics
                    Incorrect dependency in class Mageplaza\Blog\Controller\Adminhtml\Post\Topics in /var/www/vhosts/EC/WEB/12/app/code/Mageplaza/Blog/Controller/Adminhtml/Post/Topics.php
    \Magento\Backend\Model\View\Result\RedirectFactory already exists in context object
            Mageplaza\Blog\Controller\Adminhtml\Post\Tags
                    Incorrect dependency in class Mageplaza\Blog\Controller\Adminhtml\Post\Tags in /var/www/vhosts/EC/WEB/12/app/code/Mageplaza/Blog/Controller/Adminhtml/Post/Tags.php
    \Magento\Backend\Model\View\Result\RedirectFactory already exists in context object
            Mageplaza\Blog\Controller\Adminhtml\Post\Save
                    Incorrect dependency in class Mageplaza\Blog\Controller\Adminhtml\Post\Save in /var/www/vhosts/EC/WEB/12/app/code/Mageplaza/Blog/Controller/Adminhtml/Post/Save.php
    \Magento\Backend\Model\Session already exists in context object
    \Magento\Backend\Model\View\Result\RedirectFactory already exists in context object
            Mageplaza\Blog\Controller\Adminhtml\Post\Edit
                    Incorrect dependency in class Mageplaza\Blog\Controller\Adminhtml\Post\Edit in /var/www/vhosts/EC/WEB/12/app/code/Mageplaza/Blog/Controller/Adminhtml/Post/Edit.php
    \Magento\Backend\Model\Session already exists in context object
    \Magento\Backend\Model\View\Result\RedirectFactory already exists in context object
            Mageplaza\Blog\Controller\Adminhtml\Topic\Save
                    Incorrect dependency in class Mageplaza\Blog\Controller\Adminhtml\Topic\Save in /var/www/vhosts/EC/WEB/12/app/code/Mageplaza/Blog/Controller/Adminhtml/Topic/Save.php
    \Magento\Backend\Model\Session already exists in context object
    \Magento\Backend\Model\View\Result\RedirectFactory already exists in context object
            Mageplaza\Blog\Controller\Adminhtml\Topic\Edit
                    Incorrect dependency in class Mageplaza\Blog\Controller\Adminhtml\Topic\Edit in /var/www/vhosts/EC/WEB/12/app/code/Mageplaza/Blog/Controller/Adminhtml/Topic/Edit.php
    \Magento\Backend\Model\Session already exists in context object
    \Magento\Backend\Model\View\Result\RedirectFactory already exists in context object
            Mageplaza\Blog\Controller\Adminhtml\Topic\Posts
                    Incorrect dependency in class Mageplaza\Blog\Controller\Adminhtml\Topic\Posts in /var/www/vhosts/EC/WEB/12/app/code/Mageplaza/Blog/Controller/Adminhtml/Topic/Posts.php
    \Magento\Backend\Model\View\Result\RedirectFactory already exists in context object
            Mageplaza\Blog\Controller\Adminhtml\Tag\Save
                    Incorrect dependency in class Mageplaza\Blog\Controller\Adminhtml\Tag\Save in /var/www/vhosts/EC/WEB/12/app/code/Mageplaza/Blog/Controller/Adminhtml/Tag/Save.php
    \Magento\Backend\Model\Session already exists in context object
    \Magento\Backend\Model\View\Result\RedirectFactory already exists in context object
            Mageplaza\Blog\Controller\Adminhtml\Tag\Edit
                    Incorrect dependency in class Mageplaza\Blog\Controller\Adminhtml\Tag\Edit in /var/www/vhosts/EC/WEB/12/app/code/Mageplaza/Blog/Controller/Adminhtml/Tag/Edit.php
    \Magento\Backend\Model\Session already exists in context object
    \Magento\Backend\Model\View\Result\RedirectFactory already exists in context object
            Mageplaza\Blog\Controller\Adminhtml\Tag\Posts
                    Incorrect dependency in class Mageplaza\Blog\Controller\Adminhtml\Tag\Posts in /var/www/vhosts/EC/WEB/12/app/code/Mageplaza/Blog/Controller/Adminhtml/Tag/Posts.php
    \Magento\Backend\Model\View\Result\RedirectFactory already exists in context object
            Mageplaza\Blog\Controller\Adminhtml\Category\Move
                    Incorrect dependency in class Mageplaza\Blog\Controller\Adminhtml\Category\Move in /var/www/vhosts/EC/WEB/12/app/code/Mageplaza/Blog/Controller/Adminhtml/Category/Move.php
    \Magento\Backend\Model\View\Result\RedirectFactory already exists in context object
            Mageplaza\Blog\Controller\Adminhtml\Category\CategoriesJson
                    Incorrect dependency in class Mageplaza\Blog\Controller\Adminhtml\Category\CategoriesJson in /var/www/vhosts/EC/WEB/12/app/code/Mageplaza/Blog/Controller/Adminhtml/Category/CategoriesJson.php
    \Magento\Backend\Model\View\Result\RedirectFactory already exists in context object
            Mageplaza\Blog\Controller\Adminhtml\Category\Save
                    Incorrect dependency in class Mageplaza\Blog\Controller\Adminhtml\Category\Save in /var/www/vhosts/EC/WEB/12/app/code/Mageplaza/Blog/Controller/Adminhtml/Category/Save.php
    \Magento\Backend\Model\View\Result\RedirectFactory already exists in context object
            Mageplaza\Blog\Controller\Adminhtml\Category\Edit
                    Incorrect dependency in class Mageplaza\Blog\Controller\Adminhtml\Category\Edit in /var/www/vhosts/EC/WEB/12/app/code/Mageplaza/Blog/Controller/Adminhtml/Category/Edit.php
    \Magento\Backend\Model\Session already exists in context object
    \Magento\Backend\Model\View\Result\RedirectFactory already exists in context object
            Mageplaza\Blog\Controller\Adminhtml\Category\SuggestCategories
                    Incorrect dependency in class Mageplaza\Blog\Controller\Adminhtml\Category\SuggestCategories in /var/www/vhosts/EC/WEB/12/app/code/Mageplaza/Blog/Controller/Adminhtml/Category/SuggestCategories.php
    \Magento\Backend\Model\View\Result\RedirectFactory already exists in context object
            Mageplaza\Blog\Controller\Adminhtml\Category\Posts
                    Incorrect dependency in class Mageplaza\Blog\Controller\Adminhtml\Category\Posts in /var/www/vhosts/EC/WEB/12/app/code/Mageplaza/Blog/Controller/Adminhtml/Category/Posts.php
    \Magento\Backend\Model\View\Result\RedirectFactory already exists in context object
            Mageplaza\Blog\Controller\Adminhtml\Category\RefreshPath
                    Incorrect dependency in class Mageplaza\Blog\Controller\Adminhtml\Category\RefreshPath in /var/www/vhosts/EC/WEB/12/app/code/Mageplaza/Blog/Controller/Adminhtml/Category/RefreshPath.php
    \Magento\Backend\Model\View\Result\RedirectFactory already exists in context object
            Mageplaza\Blog\Controller\Adminhtml\Post
                    Incorrect dependency in class Mageplaza\Blog\Controller\Adminhtml\Post in /var/www/vhosts/EC/WEB/12/app/code/Mageplaza/Blog/Controller/Adminhtml/Post.php
    \Magento\Backend\Model\View\Result\RedirectFactory already exists in context object
            Mageplaza\Blog\Helper\Data
                    Missed required argument objectManager in parent::__construct call. File: /var/www/vhosts/EC/WEB/12/app/code/Mageplaza/Blog/Helper/Data.php
    Total Errors Count: 23
    
    opened by rhertogh 14
  • MySQL error on setup:upgrade

    MySQL error on setup:upgrade

    Preconditions

    1. Magento: 2.3.3
    2. Mageplaza blog: 3.1.1

    Steps to reproduce

    1. Update the extension
    2. Run setup:upgrade

    OUTPUT: SQLSTATE[42000]: Syntax error or access violation: 1061 Duplicate key name 'MAGEPLAZA_BLOG_AUTHOR_USER_ID', query was: ALTER TABLE mageplaza_blog_author MODIFY COLUMN user_id int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT "Author ID", MODIFY COLUMN name varchar(255) NULL COMMENT "Author Name", MODIFY COLUMN updated_at timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT "Author Updated At", MODIFY COLUMN short_description mediumtext NULL COMMENT "Author Short Description", ADD COLUMN customer_id int(10) UNSIGNED NULL DEFAULT 0 COMMENT "Customer ID", ADD COLUMN type int(10) UNSIGNED NULL DEFAULT 0 COMMENT "Author Type", ADD COLUMN status int(10) UNSIGNED NULL DEFAULT 0 COMMENT "Author Status", ADD INDEX MAGEPLAZA_BLOG_AUTHOR_USER_ID (user_id), COMMENT='Mageplaza Blog Author Table'

    I checked the pull request containing a fix for this issue, but the setup:upgrade still fails with the mysql error.

    opened by LucasMDL 13
  • Error whilst upgrading from 3.0.6 to 3.1.1

    Error whilst upgrading from 3.0.6 to 3.1.1

    I just tried updating the module from 3.0.6 to 3.1.1 via composer (composer update);

    Updating mageplaza/magento-2-blog-extension (3.0.6 => 3.1.1): Downloading (100%)

    This went fine, but then I ran the setup:upgrade command and this error showed:

    SQLSTATE[42000]: Syntax error or access violation: 1061 Duplicate key name 'MAGEPLAZA_BLOG_AUTHOR_USER_ID', query was: ALTER TABLEmageplaza_blog_authorMODIFY COLUMNuser_idint(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT "Author ID", MODIFY COLUMNnamevarchar(255) NULL COMMENT "Author Name", MODIFY COLUMNupdated_attimestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT "Author Updated At", MODIFY COLUMNshort_descriptionmediumtext NULL COMMENT "Author Short Description", ADD COLUMNcustomer_idint(10) UNSIGNED NULL DEFAULT 0 COMMENT "Customer ID", ADD COLUMNtypeint(10) UNSIGNED NULL DEFAULT 0 COMMENT "Author Type", ADD COLUMNstatusint(10) UNSIGNED NULL DEFAULT 0 COMMENT "Author Status", ADD INDEXMAGEPLAZA_BLOG_AUTHOR_USER_ID(user_id), COMMENT='Mageplaza Blog Author Table'

    And it broke my store because it halted the upgrade. So I disabled the blog module to re-run all commands to get the store back online. Then I re-enabled the module and ran the setup again, but strangely without any error message this time, the module was enabled fine. When I check the module in the backend it shows correct with the latest version, but on the frontend the whole blog and all posts just shows a blank page without any errors or logs on the server.

    This is on Magneto 2.3.3, php7.2,

    opened by Asitis 13
  • Non-cacheable blog articles pages

    Non-cacheable blog articles pages "mpblog_post_view"

    Preconditions (*)

    1. Magento 2.4.3-p3

    Steps to reproduce (*)

    1. A performance of blog articles pages is very poor because of a non-cacheable block "mpblog.post.view" at a layout image

    Expected result (*)

    1. [An upload time for a cached page is near about 200 ms (using Varnish cache).
      image

    Actual result (*)

    1. A page upload time without a cache may vary from 1 to 20 sec. This is a huge impact to performance. image

    Please remove cacheable="false" from Blog pages layouts! You can use blocks cache-tags instead.

    opened by zaietsv 0
  • Setup dependencies and fix install error

    Setup dependencies and fix install error

    Description

    This PR adds the proper dependencies to both composer and Magento, as well as fixes #337 with a proxy.

    Fixed Issues (if relevant)

    1. https://github.com/mageplaza/magento-2-reports/337: Issue title

    Manual testing scenarios

    1. Install Magento alongside this module.

    Contribution checklist

    • [ ] Pull request has a meaningful description of its purpose
    • [ ] All commits are accompanied by meaningful commit messages
    • [ ] All new or changed code is covered with unit/integration tests (if applicable)
    opened by lfolco 0
  • Unable to import WordPress blogs

    Unable to import WordPress blogs

    1. Magento: 2.4.3-p1 (this is a multi-store installation)
    2. PHP: 7.4
    3. MySQL: 10.2.44-MariaDB
    4. Better Blog 4.1.4

    Steps to reproduce

    1. In Magento Admin- Content / Better Blog / Import
    2. Select WordPress and enter DB connectivity info (error occurs regardless of how Import Behaviour or Allow update content on existing URL-key is set)
    3. Check Connection passes

    Expected result

    1. Imports WordPress blog entries

    Actual result

    1. Import fails "A technical problem with the server created an error. Try again to continue what you were doing. If the problem persists, try again later."
    2. var/log/exception.log entry: [2022-07-26 21:47:15] main.CRITICAL: Unable to generate url key. Please check the setting and try again. {"report_id":"599eb51105c449506feac1b4a8be333e97c5b0f69279e5faf49eed0ed8da87da","exception":"[object] (Magento\Framework\Exception\LocalizedException(code: 0): Unable to generate url key. Please check the setting and try again. at /var/www/magento/vendor/mageplaza/magento-2-blog-extension/Helper/Data.php:635)"} []

    I'm able to install the Magefan Blog module and import the blog entries with that module, so the database connectivity, schema, etc are apparently okay.

    opened by IngenuITStL 0
  • Error Import blogs using Magento 2.4.4

    Error Import blogs using Magento 2.4.4

    Preconditions (*)

    1.Magento version 2.4.4

    Steps to reproduce (*)

    1. Upgrade to Magento 2.4.4
    2. Brows to Admin > Content ? Better Blog > Import > Select Import Type > AheadWorks Blog [Magento 1] > Click button Check Connection

    Expected result (*)

    Import blog posts

    Actual result (*)

    throws error : Warning: Undefined array key "import_name" in /var/www/html/vendor/mageplaza/magento-2-blog-extension/Controller/Adminhtml/Import/Validate.php on line 83

    opened by anasshl 1
  • Can not add another image uploader into the blog post

    Can not add another image uploader into the blog post

    Summary (*)

    Magento ver. 2.4.2 Mageplaza_Blog 2.5.3

    I want to add another image uploader in to the blog posts. To achive this;

    • I created a new column in the table mageplaza_blog_post.
    • I added a form filed(Image uploader) into the backend post edit form(just copied the original image uploader code from _prepareForm() of Post.php).

    When I submit the form, image path is not added into the database(Other data are saved without any error). Seems like new image field is not passed into the execute() function in the Mageplaza\Blog\Controller\Adminhtml\Post\Save.php

    If I change the field type to 'text' in the blog post edit form, it's value get saved in the database correctly. The field value is not passed only for image uploader type.

    Examples (*)

        $fieldset->addField('thumb_image', \Mageplaza\Blog\Block\Adminhtml\Renderer\Image::class, [
            'name'  => 'thumb_image',
            'label' => __('Thumb'),
            'title' => __('Thumb'),
            'path'  => $this->imageHelper->getBaseMediaPath(Image::TEMPLATE_MEDIA_TYPE_POST),
            'note'  => __('The appropriate size is 265px * 250px.')
        ]);
    
        $fieldset->addField('image', \Mageplaza\Blog\Block\Adminhtml\Renderer\Image::class, [
            'name'  => 'image',
            'label' => __('Image'),
            'title' => __('Image'),
            'path'  => $this->imageHelper->getBaseMediaPath(Image::TEMPLATE_MEDIA_TYPE_POST),
            'note'  => __('The appropriate size is 265px * 250px.')
        ]);
    

    Proposed solution

    opened by cmslakruwan 1
  • Magento 2.4.4 installation fails with module

    Magento 2.4.4 installation fails with module

    When installing Magento 2.4.4 with bin/magento setup:install the installation fails with

    [Progress: 351 / 1431]
    Module 'Mageplaza_Core':
    [Progress: 352 / 1431]
    Module 'Mageplaza_Blog':
    
    In Config.php line 449:
    
      [Magento\Framework\Exception\LocalizedException]
      Invalid entity_type specified: customer
    
    
    Exception trace:
      at /var/www/html/vendor/magento/module-eav/Model/Config.php:449
     Magento\Eav\Model\Config->getEntityType() at /var/www/html/vendor/magento/module-eav/Model/Entity/AbstractEntity.php:326
     Magento\Eav\Model\Entity\AbstractEntity->setType() at /var/www/html/dev/tests/integration/tmp/sandbox-0-f7ad8f84d33a12987aec437e3b27367635fd589fd3258c86d79fdaef59f41def/generated/code/Magento/Customer/Model/ResourceModel/Customer/Interceptor.php:149
     Magento\Customer\Model\ResourceModel\Customer\Interceptor->setType() at /var/www/html/vendor/magento/module-customer/Model/ResourceModel/Customer.php:97
     Magento\Customer\Model\ResourceModel\Customer->__construct() at /var/www/html/dev/tests/integration/tmp/sandbox-0-f7ad8f84d33a12987aec437e3b27367635fd589fd3258c86d79fdaef59f41def/generated/code/Magento/Customer/Model/ResourceModel/Customer/Interceptor.php:14
     Magento\Customer\Model\ResourceModel\Customer\Interceptor->__construct() at /var/www/html/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php:121
    
    

    The same error can be reproduces when running integration tests.

    Tested on Magento 2.4.4, PHP 8.1, Mageplaza_Blog 4.1.3.

    The same error message is also thrown in https://github.com/mageplaza/magento-2-smtp/issues/309

    opened by BorisovskiP 5
Releases(v4.1.5)
Deeper is a easy way to compare if 2 objects is equal based on values in these objects. This library is heavily inspired in Golang's reflect.DeepEqual().

Deeper Deeper is a easy way to compare if 2 objects is equal based on values in these objects. This library is heavily inspired in Golang's reflect.De

Joubert RedRat 4 Feb 12, 2022
Magento 2 SEO extension will do perfectly for your better SEO.

Magento 2 SEO extension will do perfectly for your better SEO. This is a bundle of outstanding features that are auto-active when you install it from Mageplaza without any code modifications. It is also friendly with your store if you need to insert meta keywords and meta descriptions for your product.

Mageplaza 121 Oct 28, 2022
Magento 2 Blog Extension - FREE, fully featured, powerful Blog solution for your online store!

Blog MX | Magento 2 Blog Module by Mirasvit FREE, fully featured, powerful Blog solution for your online store! Magento 2 Blog MX allows you to open a

Mirasvit 71 Dec 7, 2022
Magento 2 Blog is an extension that allows you to manage your store and blog

Magento 2 Blog Extension by Magefan Magento 2 Blog is an extension that allows you to manage your store and blog from one place without having to rely

Magefan 243 Dec 21, 2022
A htaccess boilerplate for all Magento Community installations. Features focus on speed, SEO and security.

magento-htaccess A htaccess boilerplate for all Magento Community installations. Features focus on speed, SEO and security. The file should be placed

Creare 114 Sep 18, 2022
Laravel Plans is a package for SaaS apps that need management over plans, features, subscriptions, events for plans or limited, countable features.

Laravel Plans Laravel Plans is a package for SaaS apps that need management over plans, features, subscriptions, events for plans or limited, countabl

ángel 2 Oct 2, 2022
An opinionated extension package for Laravel Orchid to extend its table handling capabilities, and some further useful helper methods.

OrchidTables An opinionated extension package for Laravel Orchid to extend its table handling capabilities, and some further useful helper methods. In

null 25 Dec 22, 2022
A collection of useful codes and utilities for WordPress plugin development..

WordPress Utils A collection of useful codes and utilities for WordPress plugin development. These simplifies common tasks and promote code reusabilit

weDevs 5 Jun 9, 2023
Laravel Blog Package. Easiest way to add a blog to your Laravel website. A package which adds wordpress functionality to your website and is compatible with laravel 8.

Laravel Blog Have you worked with Wordpress? Developers call this package wordpress-like laravel blog. Give our package a Star to support us ⭐ ?? Inst

Binshops 279 Dec 28, 2022
A customizable decentralized micro-blog (Twitter) and cms (Wordpress) that only you host and moderate.

Consider this --> each Miter account is individually hosted on a user's personal and private third party server (host) - either purchased or free - as

Vije Miller 3 Jun 8, 2022
This is the information I prepared for the PHP interview.The notes include PHP, MySql, Linux, etc.

PHP面试准备的资料 这个项目是自己准备面试整理的资料。可能包括PHP、MySQL等资料。方便自己以后查阅,会不定期更新,如果错误,请指出,谢谢。欢迎大家提交PR,谢谢大家的star 可以通过https://xianyunyh.gitbooks.io/php-interview/预览。欢迎有精力的朋

Troy 1.2k Dec 24, 2022
Searchable DataObjects is a module that permit to include DataObjects into frontend search

Searchable DataObjects Searchable DataObjects is a module that permit to include DataObjects into frontend search. Introduction Pages are not always t

Gabriele Brosulo 25 May 11, 2022
A super simple, clean and pretty error handler that replace the default error handler of PHP. You need only include this file!

php-custom-error-handler A super simple, clean and pretty error handler that replace the default error handler of PHP. You need just include only this

null 6 Nov 7, 2022
Laravel & MySQL, jQuery, Ajax, Bootstrap. Also, it's include email send function without any API.

Rewards-Dacor Laravel & MySQL, jQuery, Ajax, Bootstrap. Also, it's include email send function without any API. [Live site link] ( https://rewardsdaco

Professional Developer 13 Dec 26, 2022
A list of useful Magento technical resources

Magento 2 Resources A curated list of useful Magento 2 resources. Resources are listed alphabetically within each category. This file is automatically

Alessandro Ronchi 895 Dec 28, 2022
All the basic features of accounting sotware

Anzarkhan.com Invoice Anzarkhan.com Invoice is an open source accounting and invoicing solution built with PHP. For more information, visit http://www

Anzar Khan 7 Jul 1, 2022