Makc666 огромное спасибо за помощь!! Но всё решилось иначе. Надо было раньше Гуглом воспользоваться. Собственно вот решение. Мне помогло. Причём и с иконкой тоже вопросов не возникает.
Правда меня смущает такое положение дел. Больше это ничем не грозит? 
Я, если честно, не стал вчитываться в это решение.
Но то, что вы сделали, в корне не верно.
Так делать не нужно.
Поле `modified_name` используется при редактировании сообщения. Значит оно нужно.
Смотрите.
Я Вам объясняю.
Когда Вы устанавливали плагин форума, вы создавали базу данных.
Одна из частей базы данных - это таблица сообщений.
Она имеет такую структуру:
CREATE TABLE IF NOT EXISTS `CPG_fr_messages` (
`msg_id` int(10) NOT NULL auto_increment,
`topic_id` mediumint(8) NOT NULL default '0',
`board_id` smallint(5) NOT NULL default '0',
`poster_time` int(10) NOT NULL default '0',
`poster_id` mediumint(8) NOT NULL default '0',
`modified_id` int(10) NOT NULL default '0',
`subject` tinytext NOT NULL,
`poster_name` tinytext NOT NULL,
`poster_email` tinytext NOT NULL,
`poster_ip` tinytext NOT NULL,
`smileys_enabled` tinyint(4) NOT NULL default '1',
`modified_time` int(10) NOT NULL default '0',
`modified_name` tinytext NOT NULL,
`body` text NOT NULL,
`icon` varchar(16) NOT NULL default 'xx',
PRIMARY KEY (`msg_id`)
) TYPE=MyISAM;
Видите, к примеру, у полей:
`poster_id` mediumint(8) NOT NULL default '0',
`modified_id` int(10) NOT NULL default '0',
есть значение по умолчанию
default '0'.
А у полей:
`modified_name` tinytext NOT NULL,
`body` text NOT NULL,
нет такого значения.
Далее...
Как я приводил код выше в своих сообщениях, то при написании сообщения в базу данных с помощью строки:
$this->db->insert(Config::item('TABLE_FR_MESSAGES'), $data);
передаются значения из массива
$data.
Данный массив содержит значения:
$data = array(
'icon' => $this->validate->post->getRaw('icon'),
'subject' => $this->validate->post->getEscaped('subject'),
'body' => $this->validate->post->getEscaped('body'),
'poster_time' => time(),
'poster_id' => USER_ID,
'poster_name' => USER_NAME,
'poster_ip' => Config::item('hdr_ip'),
'smileys_enabled' => 1,
);
Если из кода структуры базы данных (первый блок кода в этом сообщении) мы выкинем все строчки с параметром
default '*****'+
строку
`msg_id` int(10) NOT NULL auto_increment,
(т.к.
auto_increment - это увеличение значения поля на +1 каждый раз при его добавлении),
то на мы получим:
`subject` tinytext NOT NULL,
`poster_name` tinytext NOT NULL,
`poster_email` tinytext NOT NULL,
`poster_ip` tinytext NOT NULL,
`modified_name` tinytext NOT NULL,
`body` text NOT NULL,
Если вы сопоставите названия данных полей с названиями тех полей, которые заносятся через массив $data, то вы увидите, что в строчках выше названия полей:
`poster_email` tinytext NOT NULL,
`modified_name` tinytext NOT NULL,
нигде не фигурируют.
Далее вы должны понимать, что когда какой-то скрипт даёт команду базе данных заполнить какую-то строку с полями, то база данных должна знать, чем их заполнять.
При этом в строке нельзя часть полей заполнить, а часть нет.
Если база данных не получает от скрипта значения, то она смотрит, а нет ли у неё указаний заполнять данное поле значением по умолчанию.
У некоторых наших полей такое указание есть - это
default '0'.
А вот у поля
`modified_name` такого значения нет.
И при этом скрипт никакие значения базе данных тоже не передал.
Поэтому вам база данных говорит о том, что у неё нет значения по умолчанию, а данные ей не прислали.
Поле
`poster_email` мы удалили, потому что я не смог найти нигде в скрипте данные, которые бы использовали бы это поле.
С полем `modified_name` нужен другой подход.
Вам нужно было всего лишь в phpMyAdmin задать данному полю значение по умолчанию '0'.