strapi-plugin-slugify
strapi-plugin-slugify copied to clipboard
[FR] add component reference type support
Hi.
No slug is generated for components.
I have analyzed the 'setting-service.js' file. I developed a possible fix that is working for me (see below).
With that fix, to produce the slug for the fields in a component, you have to set the plugin settings file field contentTypes using the value of the collectionName field used in the component configuration file.
Strapi: 4.11.4 Strapi Plugin Slugify: 2.3.3 MySQL: 8.0.30 (MySQL Community Server - GPL)
Here is a possible fix to generate a slug for components by changing the build method:
build(settings) {
const buildModel = (contentType, uid, nameAttr,displayName) => {
const model = settings.contentTypes[contentType[nameAttr]];
if (!model) {
return;
}
// ensure provided fields are present on the model
const hasField = isValidModelField(contentType, model.field);
if (!hasField) {
strapi.log.warn(
`[slugify] skipping ${contentType.info[displayName]} registration, invalid field provided.`
);
return;
}
let references = _.isArray(model.references) ? model.references : [model.references];
const hasReferences = references.every((referenceField) =>
isValidModelField(contentType, referenceField)
);
if (!hasReferences) {
strapi.log.warn(
`[slugify] skipping ${contentType.info[displayName]} registration, invalid reference field provided.`
);
return;
}
const data = {
uid,
...model,
contentType,
references,
};
settings.modelsByUID[uid] = data;
settings.modelsByName[contentType[nameAttr]] = data;
};
// build models
settings.modelsByUID = {};
settings.modelsByName = {};
_.each(strapi.contentTypes, (contentType, uid) => buildModel(contentType, uid, 'modelName', 'singularName'));
_.each(strapi.components, (contentType, uid) => buildModel(contentType, uid, 'collectionName', 'displayName'));
_.omit(settings, ['contentTypes']);
return settings;
}
Thanks for the request and suggestion. For now this plugin only supports fields define don the model directly.
I will at some point add relational and component support. At the moment their is no eta for that.
I am thinking instead to change how the settings work. For reference fields it will allow for a string or object. In object mode you can specify the path and type (field,relation,component) that the reference field is.
Also requesting support for object reference. Example: We have categories like cat cat2 and we would like to be able to auto generate cat/article cat2/article2
Each category has a field on it called slug path