it-swarm.com.de

Wie füge ich den zuletzt bearbeiteten Stempel zu JComments hinzu?

Ich habe mich gefragt, ob jemand weiß, wie ich einen zuletzt bearbeiteten Stempel hinzufügen kann, wenn jemand seinen Beitrag in JComments bearbeitet. Ich habe am Ende der jcomments-Tabelle eine zusätzliche Spalte mit dem Namen editdate hinzugefügt.

Ich bin mir meistens nicht sicher, wie ich die Abfrage einbauen soll, mit der das Bearbeitungsdatum registriert wird.

Die Verweise auf die Schaltfläche Bearbeiten in der Symbolleiste lauten wie folgt. Das erste in components/com_jcomments/tpl/default/tpl_comment.php innerhalb der Funktion zum Anzeigen der Symbolleistenschaltflächen:

if ($this->getVar('button-edit') == 1) {
                $text = JText::_('BUTTON_EDIT');
?>
    <a class="toolbar-button-edit" href="#" onclick="jcomments.editComment(<?php echo $comment->id; ?>); return false;" title="<?php echo $text; ?>"></a>
<?php
            }

Die Sekunde in components/com_jcomments/js/jcomments-v2.3.js, die ich annehme, verweist auf den nächsten Ort.

editComment: function(i){this.busyComment(i);var a=arguments;if(this.form==null){a=new Array(i,1);}return this.ajax('JCommentsEditComment', a);},

Und die dritte die editcomment-Funktion in components/com_jcomments/jcomments.ajax.php. Die Speicherfunktion ist darunter, nicht sicher, welche tatsächlich die Bearbeitung speichert.

public static function editComment($id, $loadForm = 0)
    {
        if (JCommentsSecurity::badRequest() == 1) {
            JCommentsSecurity::notAuth();
        }

        $user = JFactory::getUser();
        $response = JCommentsFactory::getAjaxResponse();
        $comment = JTable::getInstance('Comment', 'JCommentsTable');

        if ($comment->load((int) $id)) {
            $acl = JCommentsFactory::getACL();

            if ($acl->isLocked($comment)) {
                $response->addAlert(JText::_('ERROR_BEING_EDITTED'));
            } else if ($acl->canEdit($comment)) {
                    $comment->checkout($user->id);

                    $name = ($comment->userid) ? '' : JCommentsText::jsEscape($comment->name);
                    $email = ($comment->userid) ? '' : JCommentsText::jsEscape($comment->email);
                    $homepage = JCommentsText::jsEscape($comment->homepage);
                    $text = JCommentsText::jsEscape(JCommentsText::br2nl($comment->comment));
                    $title = JCommentsText::jsEscape(str_replace("\n", '', JCommentsText::br2nl($comment->title)));

                    if (intval($loadForm) == 1) {
                        $form = JComments::getCommentsForm($comment->object_id, $comment->object_group, true);
                        $response->addAssign('comments-form-link', 'innerHTML', $form);
                    }
                    $response->addScript("jcomments.showEdit(" . $comment->id . ", '$name', '$email', '$homepage', '$title', '$text');");
                } else {
                    $response->addAlert(JText::_('ERROR_CANT_EDIT'));
                }
        }
        return $response;
    }

public static function saveComment($values = array())
    {
        if (JCommentsSecurity::badRequest() == 1) {
            JCommentsSecurity::notAuth();
        }

        $config = JCommentsFactory::getConfig();

        $response = JCommentsFactory::getAjaxResponse();
        $values = self::prepareValues($_POST);
        $comment = JTable::getInstance('Comment', 'JCommentsTable');
        $id = (int) $values['id'];

        if ($comment->load($id)) {
            $acl = JCommentsFactory::getACL();

            if ($acl->canEdit($comment)) {
                if ($values['comment'] == '') {
                    self::showErrorMessage(JText::_('ERROR_EMPTY_COMMENT'), 'comment');
                } else if (($config->getInt('comment_maxlength') != 0)
                    && ($acl->check('enable_comment_length_check') == 1)
                    && (JCommentsText::strlen($values['comment']) > $config->getInt('comment_maxlength'))) {
                    self::showErrorMessage(JText::_('ERROR_YOUR_COMMENT_IS_TOO_LONG'), 'comment');
                } else if (($config->getInt('comment_minlength') != 0)
                    && ($acl->check('enable_comment_length_check') == 1)
                    && (JCommentsText::strlen($values['comment']) < $config->getInt('comment_minlength'))) {
                    self::showErrorMessage(JText::_('ERROR_YOUR_COMMENT_IS_TOO_SHORT'), 'comment');
                } else {
                    $bbcode = JCommentsFactory::getBBCode();

                    $comment->comment = $values['comment'];
                    $comment->comment = $bbcode->filter($comment->comment);
                    $comment->published = $acl->check('autopublish');


                    if (($config->getInt('comment_title') != 0) && isset($values['title'])) {
                        $comment->title = stripslashes((string)$values['title']);
                    }

                    if (($config->getInt('author_homepage') == 1) && isset($values['homepage'])) {
                        $comment->homepage = JCommentsText::url($values['homepage']);
                    } else {
                        $comment->homepage = '';
                    }

                    $result = JCommentsEventHelper::trigger('onJCommentsCommentBeforeChange', array(&$comment));

                    if (in_array(false, $result, true)) {
                        return $response;
                    }

                    $comment->store();
                    $comment->checkin();

                    JCommentsEventHelper::trigger('onJCommentsCommentAfterChange', array(&$comment));

                    if ($config->getInt('enable_notification') == 1) {
                        if ($config->check('notification_type', 1) == true) {
                            JComments::sendNotification($comment, false);
                        }
                    }
                    $html = JCommentsText::jsEscape(JComments::getCommentItem($comment));
                    $response->addScript("jcomments.updateComment(" . $comment->id . ", '$html');");
                }
            } else {
                $response->addAlert(JText::_('ERROR_CANT_EDIT'));
            }
        }
        return $response;

Grundsätzlich möchte es nur ein aktuelles Datum in die Editdate-Spalte beim Senden einfügen. Es kann andere Hinweise darauf geben, aber ich habe keine gefunden. Dies ist, wohin der Pfad führte, und ich gehe davon aus, dass eine Abfrage eingefügt werden muss, nur nicht sicher, wo oder wie die Daten in die Datenbank eingefügt werden sollen. Danke für jede Hilfe.

1
Mythic

Eine kurze Antwort von mir wäre, wenn Sie eine zusätzliche Spalte in der jcomments-Tabelle erstellt hätten, dass diese Spalte (wenn MySQL) eine Spalte vom Typ Zeitstempel in der Tabelle sein sollte. Es wird nur automatisch das Datum und die Uhrzeit bei jeder Änderung/Bearbeitung/Einfügung der Zeilen aktualisiert, so dass Sie die PHP-Dateien für diesen Zweck nicht bearbeiten müssen. Sie sollten die Spalte nur so einstellen.

So sollte es sein:

editdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

Ich bin hier nicht der beste MySQL-Guru, aber mit so etwas wie dieser Abfragezeile können Sie den Feldtyp der Tabellenspalte in Ihrer Datenbank ändern.

ALTER TABLE `mydb`.`jcomments` MODIFY COLUMN `editdate` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

Wenn es einen Fehler in der obigen Abfrage gibt, wird jemand (wie '@mickmackusa' - der hier wirklich ein Guru für Datenbankabfragen ist) wahrscheinlich so freundlich sein, ihn ein wenig zu beheben.

Verweis: http://www.mysqltutorial.org/mysql-timestamp.aspx

1
Zollie