Reviving Articles plugin

Hi everyone.
I’ve been using articles on some websites for a while, I am sad to see it hasn’t been updated in ages :cry:.

For the people who doesn’t know it or never used it, articles was the first blogging system for modx revo ( correct me if I am wrong ).

I was thinking of updating the plugin and give it some love. But my knowledge is limited, I am designer, not a developer (shame on me :laughing:).

A while ago I updated the default theme for Bootstrap 4 on my own repo: https://github.com/carlo-13/Articles

Below are the things that would need to be done to make articles better:

  • Update to bootstrap 4.3 by default ( that can be done easily with my repo )
  • Replace Quip with Tickets
  • Replace GetResources with PdoTools
  • Add support for Recatpcha ( V2 and V3 )

Other features I was thinking about:

The thing is:

Who is responsible for updating the plugin ?
Is there any developer out there, willing to give articles some love :heart: ?

Of course, this is an open source plugin, so don’t expect to be paid.
On the other hand, it could be a way to bring more people to use modx.

3 Likes

Last I heard @joshualuckers was talking about picking it up and making some improvements (I think). But Articles is very much a deformation of a bunch of things smashed together and updating and improving it isn’t as straight forward as it should be.

2 Likes

Thanks for reminding me! I pulled some strings and arranged push access to the Articles repository.

I’m now able to merge PR’s that have been submitted and start doing some bug fixes.

All help is welcome!

3 Likes

Great news. There are lots of ways Articles could be improved. One way would be to move all the various Tpl chunks used by Articles into actual chunks in their own category.

Since so many users will modify them, it might make sense to create a general getTpl() method used throughout Articles. A nice feature would be to have the method look for a chunk or file with the standard name of the Tpl prefixed with “My” and use it if found (and use the current settings for them if that’s not found to preserve BC). That way users could just duplicate them, add the prefix, and modify them without having to find the setting or property specifying the Tpl name.

3 Likes

That’s a great idea! It would bring much more flexibility!
I had a hard time when I tried to edit quip settings.

1 Like

I released Articles 1.7.12!

5 Likes

Are you working on new features which are suggested above ???

1 Like

Not yet, I want to do some spring cleaning first. See my post on Patreon.

1 Like

I am still have a situation where Articles container will not show the child (created) articles.

1 Like

Thanks for your patience. To help find the cause of your issue I would like some more information to see if I can reproduce it:

  • MODX version
  • PHP version
  • Webbrowser (have you tried other browsers?)
  • Does it happen when you create a new Article container?
  • Can you share the settings for the container?
  • Anything else I can try to reproduce it?
1 Like

Hello,

Thanks for the reply. This is a reference to the problem - https://forums.modx.com/thread/101937/articles-not-showing-articles-children … It was a known problem. Articles is/was a very popular tool, but this particular issue rendered it non-functional. It worked under the old version of Modx, but does not seem to work in 2.7 (looks like). Maybe there are things that need to fixed in database.

Also, what I could help with Modx plugins is a list of all required dependencies in the documentation.

These are the relevant values:

MODX version               = MODX Revolution 2.7.0-pl (traditional)
Version codename           = Revolution
phpinfo()                  = View
Server Time                = 08:40:26 PM
Local Time                 = 08:40:26 PM
Server Offset              = 0
ExtJS Version              = 3.4.1
Smarty Version             = 3.1.27
PHPMailer Version          = 5.2.14
MagpieRSS Version          = 0.72
Database type              = mysql
Database version           = 5.6.41-84.1
Database charset           = utf8
Table prefix               = modx_
PDO support                = enabled
PDO drivers                = mysql, odbc, pgsql, sqlite
PDO Driver for MySQL       = enabled
Client API version         = mysqlnd 5.0.12-dev - 20150407
Directive                  = Local Value,Master Value
pdo_mysql.default_socket   = /var/lib/mysql/mysql.sock,/var/lib/mysql/mysql.sock
Zip                        = enabled
Zip version                = 1.13.5
Libzip version             = 1.1.2
allow_url_fopen            = On
allow_url_include          = Off
arg_separator.input        = &
arg_separator.output       = &
auto_append_file           = no value
auto_globals_jit           = On
auto_prepend_file          = no value
browscap                   = no value
default_charset            = UTF-8
default_mimetype           = text/html
disable_classes            = no value
disable_functions          = no value
display_errors             = Off
display_startup_errors     = Off
doc_root                   = no value
docref_ext                 = no value
docref_root                = no value
enable_dl                  = Off
enable_post_data_reading   = On
error_append_string        = no value
error_log                  = error_log
error_prepend_string       = no value
error_reporting            = 32759
exit_on_timeout            = Off
expose_php                 = Off
extension_dir              = /opt/cpanel/ea-php70/root/usr/lib64/php/modules
file_uploads               = On
highlight.comment          = #FF8000
highlight.default          = #0000BB
highlight.html             = #000000
highlight.keyword          = #007700
highlight.string           = #DD0000
html_errors                = On
ignore_repeated_errors     = Off
ignore_repeated_source     = Off
ignore_user_abort          = Off
implicit_flush             = Off
include_path               = .:/opt/cpanel/ea-php70/root/usr/share/pear
input_encoding             = no value
internal_encoding          = no value
log_errors                 = On
log_errors_max_len         = 1024
mail.add_x_header          = On
mail.force_extra_parameters= no value
mail.log                   = no value
max_execution_time         = 30
max_file_uploads           = 20
max_input_nesting_level    = 64
max_input_time             = 60
max_input_vars             = 1000
memory_limit               = 256M
open_basedir               = no value
output_buffering           = no value
output_encoding            = no value
output_handler             = no value
post_max_size              = 64M
precision                  = 14
realpath_cache_size        = 4096K
realpath_cache_ttl         = 120
register_argc_argv         = On
report_memleaks            = On
report_zend_debug          = On
request_order              = GP
serialize_precision        = 100
short_open_tag             = On
SMTP                       = localhost
smtp_port                  = 25
sql.safe_mode              = Off
sys_temp_dir               = no value
track_errors               = Off
unserialize_callback_func  = no value
upload_max_filesize        = 64M
upload_tmp_dir             = no value
user_dir                   = no value
user_ini.cache_ttl         = 300
user_ini.filename          = .user.ini
variables_order            = GPCS
xmlrpc_error_number        = 0
xmlrpc_errors              = Off
zend.assertions            = -1
zend.detect_unicode        = On
zend.enable_gc             = On
zend.multibyte             = Off
zend.script_encoding       = no value
1 Like

Thanks for providing the info! Do you get any errors in the console of your webbrowser?

1 Like

Thanks for the reply. I will have to reinstall Articles and see if any show up. I uninstalled it. Later tonight I will take a look at it.

1 Like

So I upgraded MODx to the latest version and cleared out cache files for good measure. I then reinstalled Articles.

When installing Articles the following errors appear. Also the Articles documentation does not list the dependencies (though it installs them).


Console running...
Attempting to install package with signature: articles-1.7.13-pl
Package found...now preparing to install.
Grabbing package workspace...
Workspace environment initiated, now installing package...
Error adding field quipComment->name: Array ( [0] => 42S21 [1] => 1060 [2] => Duplicate column name 'name' )
Error adding field quipComment->email: Array ( [0] => 42S21 [1] => 1060 [2] => Duplicate column name 'email' )
Error adding field quipComment->website: Array ( [0] => 42S21 [1] => 1060 [2] => Duplicate column name 'website' )
Error adding field quipComment->resource: Array ( [0] => 42S21 [1] => 1060 [2] => Duplicate column name 'resource' )
Error adding field quipComment->idprefix: Array ( [0] => 42S21 [1] => 1060 [2] => Duplicate column name 'idprefix' )
Error adding field quipComment->existing_params: Array ( [0] => 42S21 [1] => 1060 [2] => Duplicate column name 'existing_params' )
Error adding index resource to quipComment: Array ( [0] => 42000 [1] => 1061 [2] => Duplicate key name 'resource' )
Error adding field quipComment->ip: Array ( [0] => 42S21 [1] => 1060 [2] => Duplicate column name 'ip' )
Error adding field quipComment->rank: Array ( [0] => 42S21 [1] => 1060 [2] => Duplicate column name 'rank' )
Error adding field quipComment->approvedby: Array ( [0] => 42S21 [1] => 1060 [2] => Duplicate column name 'approvedby' )
Error adding field quipComment->deleted: Array ( [0] => 42S21 [1] => 1060 [2] => Duplicate column name 'deleted' )
Error adding field quipComment->deletedon: Array ( [0] => 42S21 [1] => 1060 [2] => Duplicate column name 'deletedon' )
Error adding field quipComment->deletedby: Array ( [0] => 42S21 [1] => 1060 [2] => Duplicate column name 'deletedby' )
Error adding index approvedby to quipComment: Array ( [0] => 42000 [1] => 1061 [2] => Duplicate key name 'approvedby' )
Error adding index deleted to quipComment: Array ( [0] => 42000 [1] => 1061 [2] => Duplicate key name 'deleted' )
Error adding index deletedby to quipComment: Array ( [0] => 42000 [1] => 1061 [2] => Duplicate key name 'deletedby' )
Error adding field quipThread->quip_call_params: Array ( [0] => 42S21 [1] => 1060 [2] => Duplicate column name 'quip_call_params' )
Error adding field quipThread->quipreply_call_params: Array ( [0] => 42S21 [1] => 1060 [2] => Duplicate column name 'quipreply_call_params' )
Could not load class: quipNotifyComment from mysql.quipnotifycomment.
Could not load class: quipNotifyComment from mysql.quipnotifycomment.
Error removing field Article->articles_container: Array ( [0] => 42000 [1] => 1091 [2] => Can't DROP 'articles_container'; check that column/key exists )
Error removing field Article->articles_container_settings: Array ( [0] => 42000 [1] => 1091 [2] => Can't DROP 'articles_container_settings'; check that column/key exists )
Successfully installed package articles-1.7.13-pl

When running Articles the Article Children still do not show up. I did see errors in the browser console … and I also saw that it could not find assets/components/articles/connector.php

ext-base.js:21 POST https://www.websitename.com/assets/components/articles/connector.php 500
i @ ext-base.js:21
request @ ext-base.js:21
request @ ext-all.js:21
doRequest @ ext-all.js:21
request @ ext-all.js:21
execute @ ext-all.js:21
load @ ext-all.js:21
MODx.grid.Grid @ modx.grid.js:115
Articles.grid.ContainerArticles @ container.articles.grid.js:129
create @ ext-all.js:21
createComponent @ ext-all.js:21
lookupComponent @ ext-all.js:21
add @ ext-all.js:21
(anonymous) @ ext-all.js:21
each @ ext-base.js:21
add @ ext-all.js:21
(anonymous) @ ext-all.js:21
each @ ext-base.js:21
add @ ext-all.js:21
initComponent @ ext-all.js:21
initComponent @ ext-all.js:21
initComponent @ ext-all.js:21
Ext.Component @ ext-all.js:21
S @ ext-base.js:21
S @ ext-base.js:21
S @ ext-base.js:21
S @ ext-base.js:21
MODx.FormPanel @ modx.panel.js:34
MODx.panel.Resource @ modx.panel.resource.js:26
Articles.panel.Container @ update.js:41
create @ ext-all.js:21
load @ modx.js?v=06b40bff:85
_loadComponents @ modx.component.js:68
MODx.Component @ modx.component.js:10
MODx.page.UpdateResource @ update.js:33
Articles.page.UpdateContainer @ update.js:15
create @ ext-all.js:21
load @ modx.js?v=06b40bff:85
(anonymous) @ ?a=resource/update&id=95:90
(anonymous) @ ext-all.js:21
b @ ext-all.js:21
setInterval (async)
e.delay @ ext-all.js:21
(anonymous) @ ext-all.js:21
fire @ ext-all.js:21
b @ ext-all.js:21
Show 11 more frames
ext-base.js:21 POST https://www.websitename.com/assets/components/quip/connector.php 500
i @ ext-base.js:21
request @ ext-base.js:21
request @ ext-all.js:21
doRequest @ ext-all.js:21
request @ ext-all.js:21
execute @ ext-all.js:21
load @ ext-all.js:21
MODx.grid.Grid @ modx.grid.js:115
Quip.grid.Comments @ comments.grid.js:104
create @ ext-all.js:21
createComponent @ ext-all.js:21
lookupComponent @ ext-all.js:21
add @ ext-all.js:21
(anonymous) @ ext-all.js:21
each @ ext-base.js:21
add @ ext-all.js:21
initComponent @ ext-all.js:21
initComponent @ ext-all.js:21
Ext.Component @ ext-all.js:21
S @ ext-base.js:21
S @ ext-base.js:21
S @ ext-base.js:21
create @ ext-all.js:21
createComponent @ ext-all.js:21
lookupComponent @ ext-all.js:21
add @ ext-all.js:21
(anonymous) @ ext-all.js:21
each @ ext-base.js:21
add @ ext-all.js:21
initComponent @ ext-all.js:21
initComponent @ ext-all.js:21
Ext.Component @ ext-all.js:21
S @ ext-base.js:21
S @ ext-base.js:21
S @ ext-base.js:21
create @ ext-all.js:21
createComponent @ ext-all.js:21
lookupComponent @ ext-all.js:21
add @ ext-all.js:21
(anonymous) @ ext-all.js:21
each @ ext-base.js:21
add @ ext-all.js:21
initComponent @ ext-all.js:21
initComponent @ ext-all.js:21
initComponent @ ext-all.js:21
Ext.Component @ ext-all.js:21
S @ ext-base.js:21
S @ ext-base.js:21
S @ ext-base.js:21
S @ ext-base.js:21
MODx.Tabs @ modx.tabs.js:22
create @ ext-all.js:21
createComponent @ ext-all.js:21
lookupComponent @ ext-all.js:21
add @ ext-all.js:21
(anonymous) @ ext-all.js:21
each @ ext-base.js:21
add @ ext-all.js:21
initComponent @ ext-all.js:21
initComponent @ ext-all.js:21
initComponent @ ext-all.js:21
Ext.Component @ ext-all.js:21
S @ ext-base.js:21
S @ ext-base.js:21
S @ ext-base.js:21
S @ ext-base.js:21
MODx.FormPanel @ modx.panel.js:34
MODx.panel.Resource @ modx.panel.resource.js:26
Articles.panel.Container @ update.js:41
create @ ext-all.js:21
load @ modx.js?v=06b40bff:85
_loadComponents @ modx.component.js:68
MODx.Component @ modx.component.js:10
MODx.page.UpdateResource @ update.js:33
Articles.page.UpdateContainer @ update.js:15
create @ ext-all.js:21
load @ modx.js?v=06b40bff:85
(anonymous) @ ?a=resource/update&id=95:90
(anonymous) @ ext-all.js:21
b @ ext-all.js:21
setInterval (async)
e.delay @ ext-all.js:21
(anonymous) @ ext-all.js:21
fire @ ext-all.js:21
b @ ext-all.js:21
Show 50 more frames
modx.window.js:60 Uncaught TypeError: this.mask.addClass is not a function
    at S.onShow (modx.window.js:60)
    at S.afterShow (ext-all.js:21)
    at S.show (ext-all.js:21)
    at Object.show (ext-all.js:21)
    at MODx.onAjaxException (modx.js?v=06b40bff:122)
    at h.Event.fire (ext-all.js:21)
    at Ext.data.Connection.fireEvent (ext-all.js:21)
    at Ext.data.Connection.handleFailure (ext-all.js:21)
    at f (ext-base.js:21)
    at m (ext-base.js:21)
onShow @ modx.window.js:60
afterShow @ ext-all.js:21
show @ ext-all.js:21
show @ ext-all.js:21
onAjaxException @ modx.js?v=06b40bff:122
fire @ ext-all.js:21
fireEvent @ ext-all.js:21
handleFailure @ ext-all.js:21
f @ ext-base.js:21
m @ ext-base.js:21
(anonymous) @ ext-base.js:21
setInterval (async)
n @ ext-base.js:21
i @ ext-base.js:21
request @ ext-base.js:21
request @ ext-all.js:21
doRequest @ ext-all.js:21
request @ ext-all.js:21
execute @ ext-all.js:21
load @ ext-all.js:21
MODx.grid.Grid @ modx.grid.js:115
Articles.grid.ContainerArticles @ container.articles.grid.js:129
create @ ext-all.js:21
createComponent @ ext-all.js:21
lookupComponent @ ext-all.js:21
add @ ext-all.js:21
(anonymous) @ ext-all.js:21
each @ ext-base.js:21
add @ ext-all.js:21
(anonymous) @ ext-all.js:21
each @ ext-base.js:21
add @ ext-all.js:21
initComponent @ ext-all.js:21
initComponent @ ext-all.js:21
initComponent @ ext-all.js:21
Ext.Component @ ext-all.js:21
S @ ext-base.js:21
S @ ext-base.js:21
S @ ext-base.js:21
S @ ext-base.js:21
MODx.FormPanel @ modx.panel.js:34
MODx.panel.Resource @ modx.panel.resource.js:26
Articles.panel.Container @ update.js:41
create @ ext-all.js:21
load @ modx.js?v=06b40bff:85
_loadComponents @ modx.component.js:68
MODx.Component @ modx.component.js:10
MODx.page.UpdateResource @ update.js:33
Articles.page.UpdateContainer @ update.js:15
create @ ext-all.js:21
load @ modx.js?v=06b40bff:85
(anonymous) @ ?a=resource/update&id=95:90
(anonymous) @ ext-all.js:21
b @ ext-all.js:21
setInterval (async)
e.delay @ ext-all.js:21
(anonymous) @ ext-all.js:21
fire @ ext-all.js:21
b @ ext-all.js:21
Show 23 more frames
modx.window.js:100 Uncaught TypeError: Cannot read property 'removeClass' of undefined
    at S.onHide (modx.window.js:100)
    at S.afterHide (ext-all.js:21)
    at S.hide (ext-all.js:21)
    at Object.hide (ext-all.js:21)
    at Object.show (ext-all.js:21)
    at MODx.onAjaxException (modx.js?v=06b40bff:122)
    at h.Event.fire (ext-all.js:21)
    at Ext.data.Connection.fireEvent (ext-all.js:21)
    at Ext.data.Connection.handleFailure (ext-all.js:21)
    at f (ext-base.js:21)
onHide @ modx.window.js:100
afterHide @ ext-all.js:21
hide @ ext-all.js:21
hide @ ext-all.js:21
show @ ext-all.js:21
onAjaxException @ modx.js?v=06b40bff:122
fire @ ext-all.js:21
fireEvent @ ext-all.js:21
handleFailure @ ext-all.js:21
f @ ext-base.js:21
m @ ext-base.js:21
(anonymous) @ ext-base.js:21
setInterval (async)
n @ ext-base.js:21
i @ ext-base.js:21
request @ ext-base.js:21
request @ ext-all.js:21
doRequest @ ext-all.js:21
request @ ext-all.js:21
execute @ ext-all.js:21
load @ ext-all.js:21
MODx.grid.Grid @ modx.grid.js:115
Quip.grid.Comments @ comments.grid.js:104
create @ ext-all.js:21
createComponent @ ext-all.js:21
lookupComponent @ ext-all.js:21
add @ ext-all.js:21
(anonymous) @ ext-all.js:21
each @ ext-base.js:21
add @ ext-all.js:21
initComponent @ ext-all.js:21
initComponent @ ext-all.js:21
Ext.Component @ ext-all.js:21
S @ ext-base.js:21
S @ ext-base.js:21
S @ ext-base.js:21
create @ ext-all.js:21
createComponent @ ext-all.js:21
lookupComponent @ ext-all.js:21
add @ ext-all.js:21
(anonymous) @ ext-all.js:21
each @ ext-base.js:21
add @ ext-all.js:21
initComponent @ ext-all.js:21
initComponent @ ext-all.js:21
Ext.Component @ ext-all.js:21
S @ ext-base.js:21
S @ ext-base.js:21
S @ ext-base.js:21
create @ ext-all.js:21
createComponent @ ext-all.js:21
lookupComponent @ ext-all.js:21
add @ ext-all.js:21
(anonymous) @ ext-all.js:21
each @ ext-base.js:21
add @ ext-all.js:21
initComponent @ ext-all.js:21
initComponent @ ext-all.js:21
initComponent @ ext-all.js:21
Ext.Component @ ext-all.js:21
S @ ext-base.js:21
S @ ext-base.js:21
S @ ext-base.js:21
S @ ext-base.js:21
MODx.Tabs @ modx.tabs.js:22
create @ ext-all.js:21
createComponent @ ext-all.js:21
lookupComponent @ ext-all.js:21
add @ ext-all.js:21
(anonymous) @ ext-all.js:21
each @ ext-base.js:21
add @ ext-all.js:21
initComponent @ ext-all.js:21
initComponent @ ext-all.js:21
initComponent @ ext-all.js:21
Ext.Component @ ext-all.js:21
S @ ext-base.js:21
S @ ext-base.js:21
S @ ext-base.js:21
S @ ext-base.js:21
MODx.FormPanel @ modx.panel.js:34
MODx.panel.Resource @ modx.panel.resource.js:26
Articles.panel.Container @ update.js:41
create @ ext-all.js:21
load @ modx.js?v=06b40bff:85
_loadComponents @ modx.component.js:68
MODx.Component @ modx.component.js:10
MODx.page.UpdateResource @ update.js:33
Articles.page.UpdateContainer @ update.js:15
create @ ext-all.js:21
load @ modx.js?v=06b40bff:85
(anonymous) @ ?a=resource/update&id=95:90
(anonymous) @ ext-all.js:21
b @ ext-all.js:21
setInterval (async)
e.delay @ ext-all.js:21
(anonymous) @ ext-all.js:21
fire @ ext-all.js:21
b @ ext-all.js:21
Show 63 more frames
1 Like

Here is another old blog post showing this issue: https://forums.modx.com/thread/99007/articles-not-showing-in-manager

1 Like

All the errors about duplicate names and fields it can’t find can be safely ignored. That just means your database is already up-to-date with what it should be, obviously because it’s a fresh installations.

The connector seems to be responding with a 500 status code, meaning an internal server error, meaning an error on either the PHP or webserver side of things. Check your server/PHP logs; there should hopefully be a meaningful error message there.

2 Likes

Thanks I will take a look.

1 Like

You may also be able to see a PHP error if you turn on Dev. Tools in your browser and check the Network tab after loading the page. You can click on a request and then on the Response tab, which will sometimes show some ugly HTML with a PHP error message in it.

FWIW, I’m using Articles with MODX 2.7 for my blog at Bob’s Guides now with no problems.

I should mention that I always create new Articles by going to “Manage Articles” and clicking on the button. At one time, there was a problem with doing it from the context menu in the tree. It may be fixed, but I got in the habit of doing it the other way.

1 Like

Okay … It seems to be finally working. I did a lot of cleanup on the website (reinstalled MODx, and reset the permissions 755 for dirs and 644 for files. I also performed lots of cache flushes and uninstalled Articles as well). Also it only worked by clicking the button in Manage Articles.

1 Like

LOL - you just jogged my memory :wink:

I wrote this in 2013 : Dude, where’s my Article.

There’s a good chance that the articles you previously wrote are lurking in the DB, but deleting them there would probably leave some orphan intersects (which SiteCheck could clean up for you).

You could also set the show_in_tree field to 1. That way, you could delete them in the Manager.

3 Likes