Magento 2.3 settings in Admin are grayed out - magento2

I want to disable Magento Review module and modify the etc/config.php
'Magento_Review' => 0,
the review module did disable, but now a lot of the settings in admin interface are grayed out
How to restore changes and put it back to be able to edit settings in admin?
Any help is appreciated.

I found that it's a configuration issue in either config.php or env.php
For myself, I found that I had a configuration issue in my env.php whereby I had 2 areas referencing different databases:
'db' => [
'connection' => [
'indexer' => [
'host' => 'mysql',
'dbname' => 'my_db_2',
'username' => 'user',
'password' => 'pass',
'active' => '1',
'persistent' => NULL,
'model' => 'mysql4',
'engine' => 'innodb',
'initStatements' => 'SET NAMES utf8;'
],
'default' => [
'host' => 'mysql',
'dbname' => 'my_db_1',
'username' => 'user',
'password' => 'pass',
'active' => '1',
'model' => 'mysql4',
'engine' => 'innodb',
'initStatements' => 'SET NAMES utf8;'
]
],
'table_prefix' => ''
],
Had my_db_1 in 1 and my_db_2 in the other. Upon matching these I ran:
php bin/magento app:config:import && \
php bin/magento setup:upgrade && \
php bin/magento cache:flush
And the configuration was no longer greyed out / disabled / unchangeable.

Related

TYPO3 9.5: TCA type 'slug' always adds '-1' to URL

I have the following configuration in my extbase TCA configuration:
'path_segment' => array(
'exclude' => 1,
'l10n_mode' => 'mergeIfNotBlank',
'label' => 'Path Segment',
'config' => [
'type' => 'slug',
'generatorOptions' => [
'fields' => ['productname'],
'replacements' => [
'/' => '-',
'.' => '',
'®' => '',
',' => '',
'|' => '',
' ' => '-',
],
],
'fallbackCharacter' => '-',
'eval' => 'unique'
]
),
When I save, I get URLs with -1 added to the URL (f.e.g "myproduct-1" instead of just "myproduct")
I can only avoid this when clicking the Icon which is labled "Recalculate URL Segment from page title" in the List-Module when editing a record.
Our Editors do not mind much about this field and would change the URL every time they save the record.
What can I do to have this "recalculation" automatically" done? Or what am I doing wrong in my configuration?
I'm using TYPO 3 9.5.17.
You should update to 9.5.18. This behaviour is a regression:
2020-05-14 ccd6da5027 [BUGFIX] Exclude current record when checking slug's uniqueness (thanks to Xavier Perseguers)
See Release Notes.

TYPO3 v9: how to query additional external database (MSSQL)

I am trying to query an additional external database connection in one of my repositories. In LocalConfiguration.php I've defined two connections (Default, External).
[...]
'DB' => [
'Connections' => [
// Local MySQL database
'Default' => [
// ...
],
// External MSSQL database
'External' => [
'charset' => 'utf-8',
'dbname' => 'DBNAME',
'driver' => 'sqlsrv',
'host' => 'someExternalIP',
'password' => 'somePassword',
'port' => 1433,
'user' => 'someUser',
],
],
],
[...]
In my repository I want to query the external database (via Doctrine).
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
->getQueryBuilderForTable('dbo.SomeTable');
$queryBuilder->getRestrictions()->removeAll();
$queryBuilder
->select('*')
->from('dbo.SomeTable');
Do I have to explicitly tell the QueryBuilder to use that particular connection? Right now I am getting an Doctrine\DBAL\Exception\ConnectionException error, as the system tries to connect via the Default-Connection.
An exception occurred while executing 'SELECT * FROM `dbo`.`SomeTable`':
SELECT command denied to user 'myLocalUser'#'localhost' for table 'SomeTable'
Check out $GLOBALS['TYPO3_CONF_VARS']['DB']['TableMapping'] where you can explicitly define what tables are located in which database. See also this for some more details https://docs.typo3.org/typo3cms/CoreApiReference/ApiOverview/Database/Configuration/Index.html
The other option is actually to use ask the Connection by name, and create a query builder out of that.
GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionByName('External')->createQueryBuilder(...)
I personally would go with the latter, as it is more explicit within the actual callers code what is used.
To work with external DB, you have to :
configure the mapping with external database and table mapping in LocalConfiguration.php
define the TCA for external tables in myExt/Configuration/TCA/MyExternalTableName.php
configure the external tables/columns mapping in ext_typoscript_setup.txt
and then, the queries in repositories will work.
Sample LocalConfiguration.php :
'DB' => [
'Connections' => [
'Default' => [
'charset' => 'utf8',
'dbname' => 'LOCAL-DB',
'driver' => 'mysqli',
'host' => '127.0.0.1',
'password' => 'PWD',
'port' => 3306,
'user' => 'USER',
],
'externalDb' => [
'charset' => 'utf8',
'dbname' => 'EXTERNAL-DB',
'driver' => 'mysqli',
'host' => 'localhost',
'password' => 'PWD',
'port' => 3306,
'user' => 'USER',
],
],
'TableMapping' => [
'MyexternalTable1' => 'externalDb',
'MyexternalTable2' => 'externalDb',
...
]
]
Sample columns mapping in myExt/ext_typoscript_setup.txt :
plugin.tx_myext {
persistence {
classes {
Vendor\MyExt\Domain\Model\LocalModel {
mapping {
tableName = ExternalTableName
recordType = \Vendor\MyExt\Domain\Model\LocalModel
columns {
col1.mapOnProperty = uid
col2.mapOnProperty = name
...
}
}
}
}
}
}

TYPO3 8 dbal mapping with other server

I've a problem.
I just installed a new TYPO3 8 with adodb and dbal extensions.
Now I have an other server with a MySQLi Server and some custom tables in one database.
I want to show and edit the data from that other MySQLi Server Database Table named account in my TYPO3. For that, I have created my own extension with an model named tx_base_domain_model_account with as example 2 fields.
After that I created a dbal mapping with the following configuration:
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['dbal'] = array(
'handlerCfg' => array(
'_DEFAULT' => array(
'type' => 'native',
'config' => array(
'driver' => 'mysqli'
)
),
'_otherServer' => array(
'type' => 'native',
'config' => array(
'username' => 'username',
'password' => 'password',
'host' => '192.168.177.XX',
'database' => 'account',
)
),
),
'table2handlerKeys' => array(
'account' => '_otherServer'
),
'debugOptions' => array(
'enabled' => true,
'printErrors' => true,
'EXPLAIN' => 1,
'parseQuery' => 1,
'joinTables' => 1
),
'mapping' => array(
'tx_base_domain_model_account' => array(
'mapTableName' => 'account',
'mapFieldNames' => array (
'uid' => 'id',
'pid' => 119,
'login' => 'login',
'password' => 'password',
'cruser_id' => 1
)
)
)
);
But I can't see, edit or whatever the data from that other server database table.
Can you help me?
Thank you
With the switch to doctrine-dbal in core v8, the core extensions 'dbal' and 'adodb' have been obsoleted. See https://docs.typo3.org/typo3cms/CoreApiReference/ApiOverview/Database/Configuration/Index.html for configuration details on how to map tables to a different dbms using doctrine-dbal.

SQLSTATE[HY000] [1045] Access denied for user - OVH Eloquent

For a project I use Slim 3 - Twig and Eloquent. On development mode, all works perfectly, but on production, hosted in the OVH shared server, I can't access to the database.
I'm hundred percent sure of credentials and the database was not created right now.
This is my code :
$capsule = new \Illuminate\Database\Capsule\Manager;
$capsule->addConnection($config['db']);
$capsule->bootEloquent();
$capsule->setAsGlobal();
Where $config['db'] contains the informations required by Eloquent :
$config = [
'settings' => [
'debug' => true,
'displayErrorDetails' => true
],
'db' => [
'driver' => 'mysql',
'host' => '****.mysql.db',
'database' => '****',
'username' => '****',
'password' => '****',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => ''
]
]
What I have to do to make it work ?
Ok ... I get the solution.
... Suspense ...
I have to remove spaces around the big arrows in my beautiful formatted array.
Yes. I'm gonna cry.

Lumen connecting to multiple databases using DB_ connections in .env - Possible?

I can see how to have multiple connections using a configuration file in app/config/database.php and this is well documented.
Is this the only way or can you also define multiple connections using the .env file?
First, you'll need to configure your connections. You need to create a config directory in your project and add the file config/database.php. Like this:
<?php
return [
'default' => 'mysql',
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'homestead',
'username' => 'root',
'password' => 'secret',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
'mysql2' => [
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'homestead2',
'username' => 'root',
'password' => 'secret',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
],
Once you've added your connection configurations, you can access them by getting the database manager object out of the container and calling ->connection('connection_name'). See below for a full example.
<?php
namespace App\Http\Controllers;
use Illuminate\Database\DatabaseManager;
class StatsController extends Controller
{
/**
* #return array
*/
public function getLatest()
{
// Resolve dependencies out of container
/** #var DatabaseManager $db */
$db = app('db');
$database1 = $db->connection('mysql');
$database2 = $db->connection('mysql2');
// Look up 3 newest users and 3 newest blog posts
$threeNewestUsers = $database1->select("SELECT * FROM users ORDER BY created_at DESC LIMIT 3");
$threeLatestPosts = $database2->select("SELECT * FROM blog_posts ORDER BY created_at DESC LIMIT 3");
return [
"new_users" => $threeNewestUsers,
"new_posts" => $threeLatestPosts,
];
}
}
http://andyfleming.com/configuring-multiple-database-connections-in-lumen-without-facades/