Tag Manager has been updated for Umbraco 17. It adds a dedicated section in the Umbraco for managing all your tags - edit, delete, create, and clean up duplicates without digging through content nodes.
This one has been a team effort over the versions - #h5yr to @NigelAtOptimised for the original package #friendly, @huwred for helping refactor and fix core issues during v13, and @Lantzify for the v13 PR improving the project structure and overview UI. Appreciated all around.
Previous versions available for v7, v8, and v13. Open to suggestions and collaboration as always PRs and feedback welcome.
This sounds like a really great package to have when using tags and I just saw that it got updated for Umbraco 17. We’re running Umbraco 17.2.0 (Cloud) right now.
However, I get the following error locally when running after adding it with dotnet add package, any idea why? I’m the only user and I have no special user groups added, just the default. Running on MacOS.
[16:09:20 INF] Starting ‘UsomeTagManagerMigrationv1’… [16:09:20 INF] At origin [16:09:20 INF] Execute InstallHelper [16:09:20 ERR] Exception (12bd8ddd). Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 1: ‘near “umbracoUserGroup2App”: syntax error’. at Microsoft.Data.Sqlite.SqliteException.ThrowExceptionForRC(Int32 rc, sqlite3 db) at Microsoft.Data.Sqlite.SqliteCommand.PrepareAndEnumerateStatements()+MoveNext() at Microsoft.Data.Sqlite.SqliteCommand.GetStatements()+MoveNext() at Microsoft.Data.Sqlite.SqliteDataReader.NextResult() at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(CommandBehavior behavior) at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader() at Microsoft.Data.Sqlite.SqliteCommand.ExecuteNonQuery() at Umbraco.Cms.Persistence.Sqlite.Services.SqlitePreferDeferredTransactionsConnection.CommandWrapper.ExecuteNonQuery() at StackExchange.Profiling.Data.ProfiledDbCommand.ExecuteNonQuery() in C:\projects\dotnet\src\MiniProfiler.Shared\Data\ProfiledDbCommand.cs:line 263 at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.FaultHandlingDbCommand.b__32_0() at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.FaultHandlingDbCommand.<>c__DisplayClass38_01.<Execute>b__0() at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.RetryPolicy.ExecuteAction[TResult](Func1 func) at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.FaultHandlingDbCommand.Execute[T](Func1 f) at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.FaultHandlingDbCommand.ExecuteNonQuery() at NPoco.Database.<>c__DisplayClass338_0.<ExecuteNonQueryHelper>b__0() at NPoco.Database.ExecutionHook[T](Func1 action) at NPoco.Database.ExecuteNonQueryHelper(DbCommand cmd) at NPoco.Database.Execute(String sql, CommandType commandType, Object args) at NPoco.Database.Execute(Sql Sql) at NPoco.Database.Execute(String sql, Object args) at Umbraco_Tag_Manager.InstallHelper.Migrate() at Umbraco.Cms.Infrastructure.Migrations.MigrationBase.MigrateAsync() at Umbraco.Cms.Infrastructure.Migrations.AsyncMigrationBase.RunAsync() at Umbraco.Cms.Infrastructure.Migrations.MigrationPlanExecutor.RunMigrationAsync(Type migrationType, MigrationContext context) at Umbraco.Cms.Infrastructure.Migrations.MigrationPlanExecutor.RunScopedMigrationAsync(Transition transition, MigrationPlan plan) at Umbraco.Cms.Infrastructure.Migrations.MigrationPlanExecutor.RunMigrationPlanAsync(MigrationPlan plan, String fromState) [16:09:20 ERR] Plan UsomeTagManagerMigrationv1 failed at step UsomeTagManagerMigrationv1-db Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 1: ‘near “umbracoUserGroup2App”: syntax error’. at Microsoft.Data.Sqlite.SqliteException.ThrowExceptionForRC(Int32 rc, sqlite3 db) at Microsoft.Data.Sqlite.SqliteCommand.PrepareAndEnumerateStatements()+MoveNext() at Microsoft.Data.Sqlite.SqliteCommand.GetStatements()+MoveNext() at Microsoft.Data.Sqlite.SqliteDataReader.NextResult() at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(CommandBehavior behavior) at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader() at Microsoft.Data.Sqlite.SqliteCommand.ExecuteNonQuery() at Umbraco.Cms.Persistence.Sqlite.Services.SqlitePreferDeferredTransactionsConnection.CommandWrapper.ExecuteNonQuery() at StackExchange.Profiling.Data.ProfiledDbCommand.ExecuteNonQuery() in C:\projects\dotnet\src\MiniProfiler.Shared\Data\ProfiledDbCommand.cs:line 263 at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.FaultHandlingDbCommand.b__32_0() at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.FaultHandlingDbCommand.<>c__DisplayClass38_01.<Execute>b__0() at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.RetryPolicy.ExecuteAction[TResult](Func1 func) at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.FaultHandlingDbCommand.Execute[T](Func1 f) at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.FaultHandlingDbCommand.ExecuteNonQuery() at NPoco.Database.<>c__DisplayClass338_0.<ExecuteNonQueryHelper>b__0() at NPoco.Database.ExecutionHook[T](Func1 action) at NPoco.Database.ExecuteNonQueryHelper(DbCommand cmd) at NPoco.Database.Execute(String sql, CommandType commandType, Object args) at NPoco.Database.Execute(Sql Sql) at NPoco.Database.Execute(String sql, Object args) at Umbraco_Tag_Manager.InstallHelper.Migrate() at Umbraco.Cms.Infrastructure.Migrations.MigrationBase.MigrateAsync() at Umbraco.Cms.Infrastructure.Migrations.AsyncMigrationBase.RunAsync() at Umbraco.Cms.Infrastructure.Migrations.MigrationPlanExecutor.RunMigrationAsync(Type migrationType, MigrationContext context) at Umbraco.Cms.Infrastructure.Migrations.MigrationPlanExecutor.RunScopedMigrationAsync(Transition transition, MigrationPlan plan) at Umbraco.Cms.Infrastructure.Migrations.MigrationPlanExecutor.RunMigrationPlanAsync(MigrationPlan plan, String fromState)
We are developing a similar package to meet some extra needs:
Permissions have been added to User / User Group to enable or restrict “adding new tags” and access to the “Tag manager” dashboard.
A new property editor for tags has been introduced that enforces these permissions, allowing editors without permission only to add existing tags, while those with permission can add new tags.
Our client was okay leaving the OOTB tag property alone and not wiring up notification handlers to verify on save/publish. So we were able to scope this new functionality to just a new “clone” of the already existing editor.
Would you consider these to be in-scope / welcome additions?
It says that the package is also available for Umbraco 18, but because you have your latest version on 17.0.8, I don’t think you already planned to create a v18 version. If you want to align your major version with the Umbraco major versions, you should have a version ceiling of 17.999999. Because if you only have a floor, the marketplace will also say that it works on v19 when it comes out.